为什么我已定义的全局变量被IE8中的另一个var语句覆盖?

时间:2013-09-25 17:34:37

标签: javascript internet-explorer-8 global-variables

我有两个脚本标记:一个用于设置我的环境,另一个用于读取该设置并对其进行操作。我已将错误减少到以下内容:

<script>
    window.myVar = 'hello world';
</script>
<script>
    var myVar;
    console.log(window.myVar); // Should be 'hello world'
</script>

在IE9 +,Chrome等中'hello world'被记录。但是,在IE8中,undefined会被记录。是什么给了什么?

2 个答案:

答案 0 :(得分:1)

这似乎是一个模糊的IE8错误。

通过简单地将所有JS放入单个脚本标记中,您可以完全避免这个问题。如果你需要将它们放在单独的脚本标签中,不确定是否有一个很好的解决方法,但我很乐意听到它。

<!-- This triggers the bug in IE8. -->
<script>
    window.myVar = 'hello world';
</script>
<script>
    var myVar;
    console.log(window.myVar); // Should be 'hello world'
</script>


<!-- This does not trigger the bug in IE8. -->
<script>
    window.myOtherVar = 'hello world again';
    var myOtherVar;
    console.log(window.myOtherVar); // Should be 'hello world again'
</script>

Here it is in a JSFiddle。如果您在打开F12开发人员工具的情况下在IE8中启动它,您会看到undefined然后'hello world again'已记录。

答案 1 :(得分:0)

如果这两个都是你的脚本,为什么不同时定义变量(如果必须定义两次)?

<script>
 window.myVar = 'hello world';
</script>
<script>
 window.myVar = window.myVar || undefined;
 console.log(window.myVar); // Should be 'hello world'
</script>