6

我对通过window全局声明变量相当陌生,所以我有点惊讶以下代码段的行为因浏览器而异。

window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);​

火狐、IE、Opera

好的

不明确的

好的

Chrome 和 Safari

好的

好的

好的

我最初的信念是它应该像 Chrome 和 Safari 那样运行,但我意识到我可能对window对象没有正确的理解,所以有更多知识渊博的人可以解释一下吗?

我意识到我可以只var test = "Good";用于那个范围,但我对为什么浏览器处理它的方式不同感兴趣。

http://jsfiddle.net/WHYFc/

4

2 回答 2

1

您的 JSFiddle 正在使用 window.load 创建脚本。

document.write 在加载 CLEARS/WIPES 文件后,所以你看到的对于那些浏览器来说是正常的,而 webkit 只是更宽松

这是您在 jsfiddle 中生成的代码:

window.addEvent('load', function() {
window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);
});

将您的小提琴更改为头部或身体,它将按预期工作

演示

于 2012-10-19T05:18:42.510 回答
0

如果您想在全局范围内存储某些内容,即使您正在打开新文档,您也可以(有点讽刺地)使用该document对象,它似乎是持久的。

document.test = "Good";

document.write(document.test); // > "Good"
document.write('<br>');
document.write(document.test); // > "Good"
document.close();

setTimeout(() => {
    document.write("Also " + document.test); // > "Also Good"
    document.close();
}, 2000);
于 2016-08-24T23:34:25.860 回答