JavaScript无需函数的可变提升

时间:2015-01-26 23:43:14

标签: javascript variables hoisting

JavaScript documentation状态:

  

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

中了解了更多相关信息

我没有得到什么?

1 个答案:

答案 0 :(得分:3)

您的var x声明 悬挂在顶部。因此,x的分配在声明之后发生,之前 alert()

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

var myvar = 'my value';

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

这个例子与你的不同之处在于这个基本方式:所涉及变量的初始化发生在<{strong> alert()之后,而不是之前。当一个var声明被提升时,唯一被提升的部分是声明本身,而不是初始化。上面的那个小函数被解释为好像它是写的:

var myvar = 'my value';

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

您的代码位于顶部x = 5,因此情况并非如此。