4

这篇Mozilla 文章中,我读到:

JavaScript 中变量的另一个不同寻常之处在于,您可以引用稍后声明的变量,而不会出现异常。这个概念被称为提升;JavaScript 中的变量在某种意义上被“提升”或提升到函数或语句的顶部。但是,尚未初始化的变量将返回未定义的值。

然后是一些例子:

/**
 * Example 1
 */
console.log(x === undefined); // logs "true"
var x = 3;


/**
 * Example 2
 */
// will return a value of undefined
var myvar = "my value";

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

上面的示例 2 将被解释为:

var myvar = "my value";

(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();

我没有看到任何东西被“提升”——至少不是在我传统上解释这个词的定义的意义上:变量似乎undefined直到它们被声明之后。您在什么意义上可以“引用稍后声明的变量”?

4

1 回答 1

7

当你使用var它时,它被“提升”到函数声明的顶部。让我们再看第二个例子:

var myvar = "my value";

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

注意如何首先var myvar = 'my value'声明。接下来,在函数范围内调用。结果是“未定义”。为什么?您会认为这将是“我的价值”,因为这是代码的顺序。console.log(myvar)

var myvar因为函数范围内的局部变量被提升了,所以它没有被定义。这本质上等同于编写这样的函数:

(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();
于 2013-02-11T05:01:45.783 回答