Mat*_*iak 1 javascript scope hoisting
为什么 foo() 函数会记录undefined?第一个text变量是一个全局变量,所以foo()应该可以访问它。
var text = "outside";
function foo() {
console.log(text);
var text = "inside";
}
foo();
Run Code Online (Sandbox Code Playgroud)
即使var语句在语句之后console.log(),声明也被提升到函数的开头。所以这声明了一个隐藏全局变量的局部变量。但是直到您真正到达语句后才会进行初始化,该语句位于console.log()语句之后。
所以你的功能相当于:
function foo() {
var text;
console.log(text);
text = 'inside';
}
Run Code Online (Sandbox Code Playgroud)
如果您没有使用var声明,那么您将继续使用全局变量,并且在console.log().