繁体   English   中英

var 吊装和 scope 可用性

[英]var hoisting and scope availability

我们知道var声明被提升但具有undefined的值:

console.log(a); // undefined

var a = 2

但是这段代码不同:

function foo() {
    console.log(a); 
}

function bar() {
    var a = 3;
    foo();
}

var a = 2;

bar(); // 2

为什么它记录2而不是undefined

为什么var a的值在声明之前就变得神奇了?

您在初始化变量后调用bar() ,因此它不再是undefined的。

看这个更简单的例子:

 function foo() { console.log(a); } foo(); // a is not yet initialized, prints undefined var a = 2; foo(); // a is now initialized, prints 2

提升只是使变量声明可用(因此您不会收到“未定义变量”错误)。 初始化只是按正常顺序发生的赋值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM