你见过这种奇怪的IE JavaScript行为/ bug吗?

Cla*_*dio 6 javascript internet-explorer

好吧,这让我抓狂:

第一个例子,没问题:

<script>

window.myvar = 150;

if (false) {
  var myvar = 3;
}

// This will popup "150"
alert(myvar)

</script>
Run Code Online (Sandbox Code Playgroud)

现在,使用两个脚本元素:

<script>

window.myvar = 150;

</script>

<script>

if (false) {
  var myvar = 3;
}

// This will popup "undefined"
alert(myvar)

</script>
Run Code Online (Sandbox Code Playgroud)

用IE8测试.

你知道为什么吗?

ale*_*lex 3

在第二个示例中,在第二个script块中,myvar已被提升(根据规范)到包含范围的顶部。请记住,JavaScript 没有块作用域,只有函数作用域。

因此,var myvar(解释的提升定义)将导致在VariableObject上查找时myvar出现。undefinedalert()myvar