关于javascript:window.onload = init();有什么区别?和window.onload = init;

What is the difference between window.onload = init(); and window.onload = init;

根据我收集到的信息,前者将函数return语句的实际值分配给onload属性,而后者则分配实际函数,并且将在窗口加载后运行。但是我仍然不感谢任何可以详细说明的人。


1
window.onload = init();

将onload事件分配给init函数执行时返回的任何内容。 init将立即执行(就像现在,不是在完成窗口加载时),并且结果将分配给window.onload。您不太可能希望这样做,但是以下内容将有效:

1
2
3
4
5
6
7
8
function init() {
   var world ="World!";
   return function () {
      alert("Hello" + world);
   };
}

window.onload = init();
1
window.onload = init;

将onload事件分配给函数init。当onload事件触发时,将运行init函数。

1
2
3
4
5
6
function init() {
   var world ="World!";
   alert("Hello" + world);
}

window.onload = init;


1
window.onload = foo;

将foo的值分配给窗口对象的onload属性。

1
window.onload = foo();

将通过调用foo()返回的值分配给窗口对象的onload属性。该值是否来自return语句取决于foo,但是对于它来说,返回一个函数(需要return语句)是有意义的。

发生load事件时,如果window.onload的值是函数引用,则window的事件处理程序将对其进行调用。


好的答案,还有一件事要补充:

浏览器运行时忽略设置为DOM事件(例如window.onload)的非对象(string, number, true, false, undefined, null, NaN)值。因此,如果您写入window.onload = 10或任何上述值类型(包括混合类型string),则事件将保持为null

更有趣的是,事件处理程序将获取任何对象类型值,即使window.onload = new Date是非常有效的代码,当您记录window.onload时也会提示当前日期。 :)但是请确保在window.load事件触发时什么都不会发生。

因此,始终将函数分配给JavaScript中的任何事件。