jquery语法函数(){mylongfunc();}与mylongfunc()比较;
我为什么要这样做:jquery语法函数(){mylongfunc();}与mylongfunc()比较;,jquery,jquery-selectors,Jquery,Jquery Selectors,我为什么要这样做: $('#myfoo').change(function(){mylongfunc();}); 与此相反: $('#myfoo').change(mylongfunc()); 额外的函数()包装器做什么?您不需要包装器函数,只需对您的方法稍作调整,如下所示: $('#myfoo').change(mylongfunc); function(){}只是一个匿名函数,您可以直接使用命名函数,只需传递该函数即可 mylongfunc //passes the function
$('#myfoo').change(function(){mylongfunc();});
与此相反:
$('#myfoo').change(mylongfunc());
额外的函数()包装器做什么?您不需要包装器函数,只需对您的方法稍作调整,如下所示:
$('#myfoo').change(mylongfunc);
function(){}
只是一个匿名函数,您可以直接使用命名函数,只需传递该函数即可
mylongfunc //passes the function
mylongfunc() //passes the RESULT of the function
$('#myfoo').change(function(){mylongfunc();});
有一个微妙的区别 当您执行
function(){myLongFunc();}
时,您正在定义一个匿名函数,它是myLongFunc
的包装器
当您执行change(myLongFunc())
时,您不会得到预期的结果,因为这实际上调用了函数并将调用结果传递给change
因此,您实际上要做的是change(myLongFunc)
,因为现在您正在传入实际的函数对象
还有另一种情况:
var myLongFunc = function() { ... };
现在,当您传入myLongFunc
时,您正在传入对匿名函数的引用
mylongfunc //passes the function
mylongfunc() //passes the RESULT of the function
$('#myfoo').change(function(){mylongfunc();});
Javascript函数采用的另一种形式是函数文本,您可以在其中定义一个函数并立即调用它。这是因为函数是Javascript中的一级对象:
(function() {
...
})();
甚至:
(function myFunc() {
...
})();
在这个场景中,您定义函数并立即调用它。在创建框架或库时,此表单通常用于名称空间和封装。jQuery就是这样做的,它被称为模块模式。这使用了一个“匿名”函数
mylongfunc //passes the function
mylongfunc() //passes the RESULT of the function
$('#myfoo').change(function(){mylongfunc();});
它使用预定义的、可重用的函数注意:我从mylongfunc
$('#myfoo').change(mylongfunc);
基本规则是: 当匿名函数只使用一次时,请使用它们 当常规函数将被多次使用(或被其他代码共享)时,请使用它们