好吧,这让我抓狂:
第一个例子,没问题:
<script> window.myvar = 150; if (false) { var myvar = 3; } // This will popup "150" alert(myvar) </script>
现在,使用两个脚本元素:
<script> window.myvar = 150; </script> <script> if (false) { var myvar = 3; } // This will popup "undefined" alert(myvar) </script>
用IE8测试.
你知道为什么吗?
解决方法
在第二个示例中,在第二个脚本块中,myvar已经是
hoisted(根据规范)到包含范围的顶部.记住JavaScript没有块范围,只有函数范围.
因此,当myme在VariableObject上查找myvar时,var myvar(被解释的提升定义)将导致myvar未定义.