通过window对象引用它们时,全局变量未定义

时间:2012-10-19 05:04:45

标签: javascript reference window undefined

我很擅长通过 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";作为该范围,但我对浏览器为何以不同方式处理它感兴趣。

http://jsfiddle.net/WHYFc/

2 个答案:

答案 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);
});

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

DEMO

答案 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);