在this 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
,直到它们被声明之后。在什么意义上你可以“引用稍后声明的变量”?
答案 0 :(得分: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";
})();