在控制台中执行时,foo将按预期方式查找b值为2的值
function 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了?
这是因为所谓的Javascript提升,这是javascript看到您的代码的方式:
function foo() {
var b; // javascript hoisted this variable on top
console.log(b) // so here you see underfined
b = 2;
console.log(b);
}
现在,由于javascriptb
在函数顶部b
使用了提升变量,因此从未使用过全局变量,因此在显示提升变量后立即声明undefined
。因此,如果您var
从函数中删除新的声明(关键字),则仍然应该可以访问全局b
变量。
顺便说一句,在函数顶部声明所有变量是一个好习惯,例如:
function foo() {
var b = 2;
console.log(b);
}
要了解有关该主题的更多信息,请参见:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句