var foo = 2;
console.log(foo); // 2
function foo() {
}
console.log(foo); // 2
var foo = 2;
console.log(foo); // 2
foo = function () {
}
console.log(foo); // function
function foo() {
}
console.log(foo); // function
var foo = 2;
console.log(foo); // 2
var foo
可以覆盖function foo
, 反之就不行。js 编译对这种操作是怎么解决的?感觉哪块知识有欠缺。
1
Orenoid 2019-06-21 22:21:02 +08:00 via Android
我记得 function 声明好像会提升到前面先解释,不是前端,说错勿喷。。
|
2
xlui 2019-06-21 22:31:41 +08:00 via iPhone
标识符优先级吧,楼下解释,我也不是前端
|
3
Yvette 2019-06-21 22:34:26 +08:00
楼上好像说反了,是 Variable Hoisting,变量的声明会提升到前面
|
4
faywong8888 2019-06-21 22:36:40 +08:00 via iPhone
一个是词法环境下的函数名,不可变(程序员代码运行时不可改变它);一个是普通的变量,可以随便玩
|
5
rabbbit 2019-06-21 22:52:00 +08:00 2
进入函数时分两步:
1 扫描函数内的所有函数和变量,将其绑定到作用域 2 执行函数代码 可以把作用域理解成一个对象, 要的时候就去这个对象里找. 对于步骤 1 也是有顺序的 先扫描函数,然后在扫描变量 所以实际运行代码是 1 ``` function foo() { } foo = 2; // 这个其实 不会被提升, 因为有同名函数了 console.log(foo); // 2 console.log(foo); // 2 ``` 2 ``` var foo; foo = 2; console.log(foo); // 2 foo = function () { } console.log(foo); // function ``` 3 ``` function foo() { } console.log(foo); // function foo = 2; console.log(foo); // 2 ``` |
6
liuy1994g 2019-06-21 22:57:05 +08:00 via Android
就是变量声明提升,function 和 var 可以看作一样的东西
|
7
wolfie 2019-06-21 22:58:19 +08:00
|
9
Takamine 2019-06-22 11:19:31 +08:00
所以我用 let。:doge:
|
10
dartabe 2019-06-24 01:56:29 +08:00
函数声明和函数表达式的区别 函数声明是第一公民 提到最前面 函数表达式只是把变量声明提前 赋值还是在当前位置
|