我对通过 window 全局声明变量还很陌生,所以我有点惊讶以下代码片段的行为因浏览器而异。
window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);
Firefox、IE、Opera
Good
undefined
Good
Chrome 和 Safari
Good
Good
Good
我最初认为它应该像 Chrome 和 Safari 那样运行,但我意识到我可能没有正确理解 window 对象,所以有没有更懂行的人解释一下? p>
我意识到我可以只对那个范围使用 var test = "Good";
,但我很想知道为什么浏览器会以不同的方式处理它。
最佳答案
您的 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);
});
将您的 fiddle 更改为头部或 body ,它将按预期工作
关于javascript - 通过窗口对象引用全局变量时未定义的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12967700/