jquery语法function(){mylongfunc();}与mylongfunc();

时间:2010-04-13 18:28:39

标签: jquery jquery-selectors

为什么我必须这样做:

$('#myfoo').change(function(){mylongfunc();});

而不是:

$('#myfoo').change(mylongfunc());

那个额外的函数(){}包装器做了什么?

3 个答案:

答案 0 :(得分:2)

您不需要包装器功能,只需对您的方法进行一些调整,如下所示:

$('#myfoo').change(mylongfunc);

function() {}只是一个匿名函数,你可以直接使用你想要的命名函数,只需传递函数。

mylongfunc //passes the function
mylongfunc() //passes the RESULT of the function

答案 1 :(得分:0)

有一个微妙的区别。

执行function(){ myLongFunc(); }时,您正在定义一个匿名函数,该函数是myLongFunc的包装。

执行change(myLongFunc())时,您无法获得预期的结果,因为实际上调用函数并将调用结果传递给change

所以你真正想做的是change(myLongFunc),因为现在你传递的是实际的函数对象。

还有另一种情况:

var myLongFunc = function() { ... };

现在当你传入myLongFunc时,你传递了对匿名函数的引用。

Javascript函数采用的另一种形式是函数文字,您可以在其中定义函数并立即调用它。这是有效的,因为函数是Javascript中的第一类对象:

(function() {
 ...
})();

甚至:

(function myFunc() {
 ...
})();

在这种情况下,您正在定义该函数并立即调用它。在创建框架或库时,此表单通常用于命名空间和封装。 jQuery这样做,它被称为模块模式。

答案 2 :(得分:0)

这使用“匿名”功能。

$('#myfoo').change(function(){mylongfunc();});

这使用预定义的可重用函数。 注意:我从()

中删除了mylongfunc
$('#myfoo').change(mylongfunc);

基本规则是:

当它们只使用一次时使用匿名函数。

在多次使用(或由其他代码共享)时使用常规函数。