Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

BUG(IE8-) 全局变量作用范围?

  今天在调试低版本IE的兼容性时遇到一个很奇葩的问题,在IE8-中,使用window.*方式定义的全局变量竟然会因为在不同的SCRIPT标签中执行而失效。在全局作用域使用var语句或直接对为定义的变量赋值创建的全局变量都可以正常工作,唯有window.*存在BUG。
  下面是BUG重现: <script>
window.g=1;
</script>
<script>
var g=g||2;
alert(g);
</script>
  这个代码在IE8-上会弹出2,而其它正常的浏览器都弹出1。
  我们使用window[name],这样的方式定义变量时通常是变量名为一个字符串的时候。这样我们当然无法直接使用var,也无法直接对这个动态变量名赋值。于是要解决这个问题,我们可以使用execScript执行一个全局的var语句,在全局作用域上定义一次,让浏览器知道这个变量名是全局变量。这样就不会再出问题了。
<script>
var name="g";
//修复IE8-的BUG
-[1,]||execScript("var "+name);
window[name]=1;
</script>
<script>
var g=g||2;
alert(g);
</script>
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^