0

JavaScript文档状态:

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

现在在我的(实际上它是来自 W3Schools 关于同一主题的代码片段)代码中,我没有使用函数:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript index</title>
</head>
<body>

<p id="demo"></p>

<script>
    x = 5; // Assign 5 to x

    elem = document.getElementById( "demo" ); // Find an element 
    elem.innerHTML = x;                     // Display x in the element

    var x; // Declare x

    alert( x );
</script>

</body>
</html>

结果alert()是 5。为什么不是undefined。据我了解,这条线var x应该被提升到顶部并且alert()应该显示undefined

我从: http ://code.tutsplus.com/tutorials/javascript-hoisting-explained--net-15092阅读了更多关于此的内容

我没有得到什么?

4

1 回答 1

3

你的var x声明提升到了顶部。因此,赋值x发生在它被声明之后,alert().

您的链接参考中的示例代码可能会让您失望:

var myvar = 'my value';

(function() {
  alert(myvar); // undefined
  var myvar = 'local value';
})();

该示例与您的示例在本质上有所不同:所涉及的变量的初始化发生在 之后alert()而不是之前。提升声明时var,提升的唯一部分是声明本身,而不是初始化。上面的那个小函数被解释为好像是这样写的:

var myvar = 'my value';

(function() {
  var myvar;
  alert(myvar); // undefined
  myvar = 'local value';
})();

您的代码x = 5位于顶部,因此情况不同。

于 2015-01-26T23:44:43.717 回答