调用函数和引用函数之间的区别?

时间:2011-11-22 13:01:39

标签: javascript

请查看以下代码:

window.onload = someFunction;

很多时候我看到使用这种代码甚至我都使用相同的代码。但是,仍有一些事情尚不清楚。

  1. 以上是一旦页面加载就调用someFunction,对。但是,我们不应该使用括号()来调用函数吗?
  2. 根据我的理解,我们只是将someFunction分配给window.onload,因此我们可以或不应该致电window.onload();
  3. 是否存在此类情况,functionName()functionName可以互换。因为在很多地方,以及在各种API中,我看到调用函数没有括号。

3 个答案:

答案 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