JavaScript 提升和作用域

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)

Bar*_*mar 5

即使var语句在语句之后console.log(),声明也被提升到函数的开头。所以这声明了一个隐藏全局变量的局部变量。但是直到您真正到达语句后才会进行初始化,该语句位于console.log()语句之后。

所以你的功能相当于:

function foo() {
    var text;
    console.log(text);
    text = 'inside';
}
Run Code Online (Sandbox Code Playgroud)

如果您没有使用var声明,那么您将继续使用全局变量,并且在console.log().