技术解析

function 声明和变量声明有什么不同?
0
2021-08-30 19:54:00
idczone
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 编译对这种操作是怎么解决的?感觉哪块知识有欠缺。


我记得 function 声明好像会提升到前面先解释,不是前端,说错勿喷。。

标识符优先级吧,楼下解释,我也不是前端

楼上好像说反了,是 Variable Hoisting,变量的声明会提升到前面

一个是词法环境下的函数名,不可变(程序员代码运行时不可改变它);一个是普通的变量,可以随便玩

进入函数时分两步:
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
```

就是变量声明提升,function 和 var 可以看作一样的东西

非前端,第一次碰到时候真的是蒙逼。
[var 关于变量提升]( https://www.jianshu.com/p/184cb2075d16)

正解。var foo 被忽略了。

所以我用 let。:doge:

函数声明和函数表达式的区别 函数声明是第一公民 提到最前面 函数表达式只是把变量声明提前 赋值还是在当前位置

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服