
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 年 6 月 21 日 via Android 我记得 function 声明好像会提升到前面先解释,不是前端,说错勿喷。。 |
2 akiakiseofficial 2019 年 6 月 21 日 via iPhone 标识符优先级吧,楼下解释,我也不是前端 |
3 Yvette 2019 年 6 月 21 日 楼上好像说反了,是 Variable Hoisting,变量的声明会提升到前面 |
4 faywong8888 2019 年 6 月 21 日 via iPhone 一个是词法环境下的函数名,不可变(程序员代码运行时不可改变它);一个是普通的变量,可以随便玩 |
5 rabbbit 2019 年 6 月 21 日 进入函数时分两步: 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 年 6 月 21 日 via Android 就是变量声明提升,function 和 var 可以看作一样的东西 |
7 wolfie 2019 年 6 月 21 日 |
9 Takamine 2019 年 6 月 22 日 所以我用 let。:doge: |
10 dartabe 2019 年 6 月 24 日 函数声明和函数表达式的区别 函数声明是第一公民 提到最前面 函数表达式只是把变量声明提前 赋值还是在当前位置 |