Firefox中奇怪的JavaScript

时间:2013-01-04 20:29:23

标签: javascript jquery object coding-style

有人可以向我解释为什么在最后一行只在firefox中为document.write打印undefined。当第一个document.write被删除但是它工作得很好,而且它似乎只在Firefox中。

document.write("Hello <br />");
myVar = 55;
document.write(window.myVar);

http://jsfiddle.net/43pbj/1/

2 个答案:

答案 0 :(得分:3)

这是因为jsfiddle。您将脚本包装在一个匿名函数中,该函数使用mootools的addEvent()函数绑定到页面的onload事件。出于某种原因,在onload事件中运行代码会导致Firefox中的范围不是window

如果您查看页面源代码,代码如下所示:

<script type='text/javascript'>//<![CDATA[ 
window.addEvent('load', function() {
document.write("Hello <br />");
myVar = 55;
document.write(window.myVar);

});//]]> 
</script>

如果您在没有任何库的情况下运行相同的脚本,并且在任何情况下都无法正常运行:http://jsfiddle.net/43pbj/4/

答案 1 :(得分:0)

您是从myVar对象调用window,但未将其设置为此类。

要么:

window.myVar = 55;
document.write(window.myVar);

或:

var myVar = 55;
document.write(myVar);

修改

就像说明一样,除非你绝对需要附加到window对象的变量,否则我会使用第二个选项。