13

为什么以下 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 中测试)

4

3 回答 3

3

HTML<script>标签 Javascript 在window. 因此,分离的脚本标签在同一范围内执行。

特别是对于 IE7,尽量不要在第二次重新定义变量:

代替

var mylib = mylib || {};

利用

mylib = window.mylib || {};

IE7 可能会覆盖mylib何时var mylib遇到的定义。

于 2013-08-12T12:48:57.087 回答
3

范围应该不是问题。每个都<script>应该在相同的全局范围内进行评估。

但是,window.mylib = ...它似乎不被视为 IE8 中的实际声明。因此,在它后面加上 avar 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>
于 2013-08-12T13:00:51.610 回答
0

您正在window.mylib第一个<script>标签中进行初始化。在第二个标签中,您使用not<script>进行初始化。然后检查这个值。如果我能够正确理解它,似乎存在一些逻辑问题。var mylibmylibwindow.mylibtitle

s的<script>范围仅限于窗口,因此只要正确定义和/或初始化它们,您拥有多少以及您在哪个变量或函数中访问变量或函数都没有关系。

于 2013-08-12T12:54:24.443 回答