为什么我们不在window.onload上使用()?

时间:2012-10-04 19:54:55

标签: javascript function

此代码末尾(full code is here

function addSongs() {
    var song1 = document.getElementById("song1");
    var song2 = document.getElementById("song2");
    var song3 = document.getElementById("song3");

    song1.innerHTML = "Blue Suede Strings, by Elvis Pagely";
    song2.innerHTML = "Great Objects on Fire, by Jerry JSON Lewis";
    song3.innerHTML = "I Code the Line, by Johnny JavaScript";
}
window.onload = addSongs;

您将看到addSongs未与()一起使用。

如果我改为

window.onload = addSongs();

它不起作用。为什么呢?

5 个答案:

答案 0 :(得分:6)

当你有addSongs()时,它告诉Javascript立即执行该函数并将该调用的返回值赋给onload处理程序。

没有(),它告诉JS引擎将函数本身分配给onload。

e.g。如果你有像

这样的东西
function x() {
   return 'hello';
}

// immediately assigns "hello" to the onload
window.onload = x(); 

与做

相同
window.onload = 'hello';

并且在某些时候,只要触发onload处理程序,JS引擎就会尝试执行名为“hello”的函数。

答案 1 :(得分:1)

addSongs是一个函数,您可以将其分配给变量(在本例中为window.onload)。另一方面,addSongs() 正在调用该函数,因此您将window.onload设置为addSongs()返回的任何内容。在这种情况下,这没什么。

答案 2 :(得分:1)

就像我们分配int a = 5; 因为我们现在知道a是一个int,我们可以为它赋一个整数值 类似window.onload是一个函数,你可以认为它是函数类型数据类型 因此我们可以分配

window.onload=function(){ .. some code ... }

或者我们可以使用

function abc(){ ... some code ...}
window.onload=abc;

答案 3 :(得分:0)

使用addSongs()时,它会立即执行,而不是在调用它时。

答案 4 :(得分:0)

因为您将onload设置为等于该功能。

如果您调用该函数,则表示您将onload设置为等于函数的return值(在本例中为undefined)。

此外,您无法控制何时onload/onready/onclick/etc开火。这才是重点。 当其中一件事发生时,你要求浏览器触发该功能 - 而不是之前。