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 变量提升
变量声明是提升的
这里相当于调用之前变量已经声明了(并赋值了)
我说的话不是很清晰~ 补充一下
过程就是
声明提升 此时为未定义
在你调用之前执行了赋值语句 (赋值是在调用之前的)
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
关键字: LHS RHS