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
中了解了更多相关信息我没有得到什么?
答案 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
,因此情况并非如此。