为什么以下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中测试过)
答案 0 :(得分:3)
HTML <script>
标记Javascript在window
范围内执行。因此,分离的脚本标记在同一范围内执行。
特别是对于IE7,请不要在第二次重新定义变量:
而不是
var mylib = mylib || {};
使用
mylib = window.mylib || {};
当遇到mylib
时,IE7可能会覆盖var mylib
的定义。
答案 1 :(得分:3)
范围不应成为问题。应在同一全局范围内评估每个<script>
。
但是,window.mylib = ...
似乎并未被视为IE8中的实际声明。因此,使用var mylib
跟随它会导致覆盖/重置为undefined
。
<script>
window.mylib = {};
</script>
<script>
console.log(typeof window.mylib); // object
</script>
<script>
var mylib;
console.log(typeof window.mylib); // undefined
</script>
在整个过程中使用var mylib
或window.mylib
时,它应该按预期工作。似乎它只是问题的混合物。
<script>
var mylib = mylib || {};
mylib.title = 'mytitle';
</script>
<script>
var mylib = mylib || {};
document.title = mylib.title || 'default'; // 'mytitle'
</script>
答案 2 :(得分:0)
您正在第一个window.mylib
标记中初始化<script>
。在第二个<script>
标记中,您使用var mylib
而不是mylib
初始化window.mylib
。然后针对此检查title
的值。如果我能够正确理解它,似乎存在一些逻辑问题。
<script>
的范围限定在窗口中,因此只要它们被正确定义和/或初始化,您访问变量或函数的数量和数量并不重要。