JavaScript提升和作用域

JavaScript hoisting and scope

本文关键字:作用域 JavaScript      更新时间:2023-09-26

为什么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()之后才会发生重新赋值。