好吧,这让我抓狂:
第一个例子,没问题:
<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未定义.