此代码末尾(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();
它不起作用。为什么呢?
答案 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
开火。这才是重点。
当其中一件事发生时,你要求浏览器触发该功能 - 而不是之前。