function foo() {
console.log(b)
}
var b = 2;
foo(); //2
为什么这里输出的是2, 是和词法作用域有关吗?
function foo() {
console.log(b)
}
var b = 2;
foo(); //2
为什么这里输出的是2, 是和词法作用域有关吗?
更新:
js 在执行前就会解析代码,此时就声明并赋值了所有变量,然后才会开始执行。
也就是说,是先把所有变量都准备好,再按代码的顺序来执行。
只要用了 var
,那么在当前作用域(及以下作用域中),该变量都是早早就准备好了的,它被赋值的时机早于任何对它的调用行为。
关键字:var 变量提升
变量声明是提升的
这里相当于调用之前变量已经声明了(并赋值了)
我说的话不是很清晰~ 补充一下
过程就是
声明提升 此时为未定义
在你调用之前执行了赋值语句 (赋值是在调用之前的)
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
关键字: LHS RHS