这是我在页面加载时测试的脚本。
window.onload = initAll;
function initAll() {
document.getElementById("pTag").innerHTML = "Hello Java Script !";
}
上面的脚本工作正常,直到我在initAll()
期间加上call. _( window.onload=initAll(); )_
这样的括号。如果在函数调用期间使用initAll()
,则不会发生任何事情。这就像剧本不在那里。
为什么会这样?
答案 0 :(得分:3)
window.onload
期望为它设置的值是一个函数(函数就像JavaScript中的任何其他对象一样)。
如果你在initAll
之后放置了parens,你实际上调用函数并将window.onload
设置为函数的返回值。由于该函数没有明确return
任何内容,因此该值为undefined
。所以在实践中你可以想到这段代码:
window.onload = initAll();
function initAll() {
// do something with document
}
等同于此代码:
var result = initAll();
window.onload = result;
function initAll() {
return null;
}
我相信你可以立即明白为什么这不起作用。
答案 1 :(得分:0)
因为您不应该在该行执行该函数,所以应该为窗口对象分配一个事件处理程序,一旦load
事件被触发,它将被触发/执行,而不是函数的返回值。
但是,不建议分配事件处理程序window.onload
,因为它将允许仅附加一个处理程序。考虑使用addEventListener
。
答案 2 :(得分:0)
因为您没有直接在window.onload语句中调用该函数,但是您正在为onload事件分配函数。然后,系统将在事件发生时自动调用您的initall函数。这就是为什么你需要函数本身(没有括号),而不是调用(带括号)
答案 3 :(得分:0)
这与Javascript的工作方式有关。函数实际上也是对象,就像javascript中的所有东西一样。
所以基本上,你正在为initAll
分配恰好是函数的“对象”window.onload
。然后在触发onload事件时调用此对象,假设它是一个函数。
现在,当您将括号放在对象名称后面时,您基本上是在告诉它将该对象视为函数并调用它。这不是如何将它分配给属性的方式,如window.onload
属性。
答案 4 :(得分:0)
window.onload = initAll;
您将initAll
函数绑定到onload
对象的window
事件。该函数成为负载处理程序。现在,当load
事件触发window
对象时,将调用此函数。
window.onload = initAll();
您正在立即调用函数initAll
。此调用返回undefined
(在您的情况下),undefined
值将分配给window.onload
。将undefined
值分配给onevent
属性显然没有效果。
答案 5 :(得分:0)
当您省略此通话中的括号时:
window.onload = initAll;
您正在为window.onload事件分配函数initAll()
的参考值。这会导致函数在调用onload事件时执行,因为它们共享相同的参考点。当你使用这样的作业时:
window.onload = initAll();
您正在为window.onload事件分配函数的返回值,在本例中为null。