foo将在控制台
中执行时按预期查找b值为2function foo() {
console.log(b)
}
var b = 2
foo() // 2 for console.log
但是当我这样做时
function foo() {
console.log(b)
var b = 2
console.log(b)
}
var b = 2
foo() // undefined for first console.log
它不再在全球范围内查找b为什么?
答案 0 :(得分:6)
这是因为所谓的Javascript Hoisting,这就是javascript看到你代码的方式:
function foo() {
var b; // javascript hoisted this variable on top
console.log(b) // so here you see underfined
b = 2;
console.log(b);
}
现在因为javascript在函数之上提升了变量b
,所以你的全局变量b
从未使用过,因此在提升变量显示undefined
之后,这个声明非常明显。因此,如果您从函数中删除新的声明(var
关键字),您仍应该可以访问全局b
变量。
function foo() {
var b = 2;
console.log(b);
}
要了解有关该主题的更多信息,请参阅: