JavaScript提升和范围

时间:2016-09-08 17:00:50

标签: javascript scope hoisting

为什么foo()函数会记录undefined? 第一个text变量是一个全局变量,因此foo()应该可以访问它。

var text = "outside";

function foo() {
    console.log(text);
    var text = "inside";
}

foo();

1 个答案:

答案 0 :(得分:4)

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

所以你的功能相当于:

function foo() {
    var text;
    console.log(text);
    text = 'inside';
}

如果您没有使用var声明,那么您将继续使用全局变量,并且在console.log()之后才会重新分配。