Javascript 为什么不在window.onload中使用()呢?

Javascript 为什么不在window.onload中使用()呢?,javascript,function,Javascript,Function,在这段代码的末尾 您将看到addSongs未与一起使用 如果我把它改成 window.onload = addSongs(); 它不起作用。为什么?当您使用addSongs时,它会立即执行,而不是在调用时执行。当您使用addSongs时,它会告诉Javascript立即执行该函数,并将该调用的返回值分配给onload处理程序 如果没有,它会告诉JS引擎将函数本身分配给onload e、 如果你有 function x() { return 'hello'; } // immediate

在这段代码的末尾

您将看到addSongs未与一起使用

如果我把它改成

window.onload = addSongs();

它不起作用。为什么?

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

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

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

e、 如果你有

function x() {
   return 'hello';
}

// immediately assigns "hello" to the onload
window.onload = x(); 
这和做同样的事

window.onload = 'hello';
在某个时刻,只要触发onload处理程序,JS引擎就会尝试执行名为hello的函数。

,因为您将onload设置为与函数相等

如果调用该函数,则将onload设置为等于函数的返回值(在本例中为undefined)

此外,您无法控制onload/onready/onclick/etc何时启动。这就是重点。
您要求浏览器在发生这些事情时启动该函数,而不是在之前。

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

就像我们分配int a=5; 因为我们现在知道a是一个int,我们可以给它赋值,比如 同样,Windows .OnLoad是一个函数,U可以认为它是函数类型的数据类型。 这样我们就可以分配

window.onload=function(){ .. some code ... }
或者我们可以使用

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

因为括号执行函数,谢谢大家的回答。
function abc(){ ... some code ...}
window.onload=abc;