【发布时间】:2013-08-12 21:23:32
【问题描述】:
为什么下面的 html 文件在 IE 中默认显示标题?其他浏览器将标题显示为 mytitle。
<script>
window.mylib = window.mylib || {};
mylib.title = 'mytitle';
</script>
<script>
var mylib = mylib || {};
document.title = mylib.title || 'default';
</script>
IE 是否为每个脚本标签创建单独的范围?
这只是一个错误还是为什么行为不同?
(在 IE8 和最新的 chrome/ff/opera 中测试)
【问题讨论】:
-
可能是一个提升错误。我想
var mylib = window.mylib || {};使您的第二个脚本按预期工作? -
其实不是,我以为会的。
-
可能不是错误,而是规范中的差异。 IE8 是 ECMAScript 3 浏览器,而 IE9+、Chrome 等是 ES5 浏览器。不过,不能说 ES3 会导致什么。
-
@Martin,有一个很好的方法可以确定。如果在第二个 sn-p 中将
var mylib重命名为var _mylib,代码是否有效?如果是这种情况,看起来在全局范围内重新定义mylib(通过var)会覆盖现有的window.mylib。 -
难道
var mylib没有被提升到最顶端,而只是提升到脚本标签的顶端。这将导致mylib在第二个标签中被重新定义为undefined。您可以尝试省略var,然后检查会发生什么。