0

在此代码的末尾(完整代码在这里

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();

它不起作用。为什么?

4

5 回答 5

6

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

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

例如,如果你有类似的东西

function x() {
   return 'hello';
}

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

这和做的一样

window.onload = 'hello';

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

于 2012-10-04T19:57:09.053 回答
1

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

于 2012-10-04T20:01:38.150 回答
1

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

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

或者我们可以使用

function abc(){ ... some code ...}
window.onload=abc;
于 2012-10-04T20:39:05.000 回答
0

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

于 2012-10-04T19:57:03.310 回答
0

因为你设置onload为等于函数。

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

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

于 2012-10-04T20:00:54.560 回答