window.onload = init();有什么不同?和window.onload = init;

时间:2012-01-12 04:19:51

标签: javascript scripting

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

3 个答案:

答案 0 :(得分:11)

window.onload = init();

在init函数执行时将onload事件分配给返回init将立即执行 ,(例如,现在不是,当窗口加载完毕时),结果将被分配到window.onload。您不太可能想要这个,但以下内容是有效的:

function init() {
   var world = "World!";
   return function () {
      alert("Hello " + world);
   };
}

window.onload = init();

window.onload = init;

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

function init() {
   var world = "World!";
   alert("Hello " + world);
}

window.onload = init;

答案 1 :(得分:4)

window.onload = foo;

foo 的值分配给window对象的onload属性。

window.onload = foo();

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

当发生加载事件时,如果 window.onload 的值是函数引用,则窗口的事件处理程序将调用它。

答案 2 :(得分:1)

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

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

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

因此,总是为JavaScript中的任何事件分配一个函数。