我很擅长通过 window 全局声明变量,所以我有点惊讶于以下代码段的行为因浏览器而异。
window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);
Firefox,IE,Opera
好
未定义
好
Chrome和Safari
好
好
好
我最初认为它应该像Chrome和Safari一样运行,但我意识到我可能没有正确理解 window 对象,那么更有知识的人会解释这个吗?
我意识到我可以只使用var test = "Good";
作为该范围,但我对浏览器为何以不同方式处理它感兴趣。
答案 0 :(得分: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);
});
将你的小提琴改为头部或身体,它将按预期工作
答案 1 :(得分: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);