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

Mic*_*iot 6 javascript window reference undefined

我通过窗口全局声明变量是相当新的,所以我有点惊讶,以下代码段的行为取决于浏览器.

window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);?
Run Code Online (Sandbox Code Playgroud)

Firefox,IE,Opera

未定义

Chrome和Safari

我最初的信念是它应该像Chrome和Safari那样表现,但我意识到我可能没有正确理解窗口对象,那么更有知识的人会解释这个吗?

我意识到我可以只使用var test = "Good";该范围,但我对浏览器为何以不同方式处理它感兴趣.

http://jsfiddle.net/WHYFc/

mpl*_*jan 1

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

document.write 加载后清除/擦除文档,因此您所看到的内容对于这些浏览器来说是正常的,而 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);
});
Run Code Online (Sandbox Code Playgroud)

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

演示版