请查看以下代码:
window.onload = someFunction;
很多时候我看到使用这种代码甚至我都使用相同的代码。但是,仍有一些事情尚不清楚。
someFunction
,对。但是,我们不应该使用括号()
来调用函数吗?someFunction
分配给window.onload
,因此我们可以或不应该致电window.onload()
; functionName()
和functionName
可以互换。因为在很多地方,以及在各种API中,我看到调用函数没有括号。答案 0 :(得分:6)
您不是正在调用该功能,而是告诉浏览器 调用哪个函数,onload。
引用函数并调用函数永远不可互换:它们完全不同。
但是,您可以调用返回函数的函数:
function getFunction() {
return function() {
alert("I'm the real onload function.");
};
}
window.onload = getFunction();
答案 1 :(得分:2)
在这种情况下,您正在为窗口onload
事件注册回调函数。为此,您为函数提供引用,不执行该函数(当然,除非执行该函数返回另一个用作回调处理程序的函数)。您指定的函数将在onload
事件发生时执行,即页面完成加载时执行。
答案 2 :(得分:1)
在JavaScript中,括号很重要。在您的情况下,您将函数对象本身分配给window
的某个槽。放括号时,显式调用函数,因此someFunction()
的值是函数的返回值,而不是函数对象本身。简而言之:
特殊情况是someVar = new someConstructor;
,一般不应该使用,并且不遵循我上面的简短说明。有关功能的非常好的解释,以及上面的特定声明,请参阅Douglas Crockford的精彩书籍 Javascript,Good Parts 。