JavaScript 提升和范围
JavaScript hoisting and scope
为什么 foo() 函数记录 undefined
?
第一个 text
变量是全局变量,因此 foo()
应该可以访问它。
var text = "outside";
function foo() {
console.log(text);
var text = "inside";
}
foo();
即使 var
语句在 console.log()
语句之后,声明也会被提升到函数的开头。所以这声明了一个局部变量来隐藏全局变量。但是在您真正到达语句之前不会发生初始化,该语句位于 console.log()
语句之后。
所以你的函数等价于:
function foo() {
var text;
console.log(text);
text = 'inside';
}
如果您不使用 var
声明,那么您将继续使用全局变量,并且直到 console.log()
.
之后才会发生重新分配。
为什么 foo() 函数记录 undefined
?
第一个 text
变量是全局变量,因此 foo()
应该可以访问它。
var text = "outside";
function foo() {
console.log(text);
var text = "inside";
}
foo();
即使 var
语句在 console.log()
语句之后,声明也会被提升到函数的开头。所以这声明了一个局部变量来隐藏全局变量。但是在您真正到达语句之前不会发生初始化,该语句位于 console.log()
语句之后。
所以你的函数等价于:
function foo() {
var text;
console.log(text);
text = 'inside';
}
如果您不使用 var
声明,那么您将继续使用全局变量,并且直到 console.log()
.