Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery语法函数(){mylongfunc();}与mylongfunc()比较;_Jquery_Jquery Selectors - Fatal编程技术网

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);

基本规则是: 当匿名函数只使用一次时,请使用它们

当常规函数将被多次使用(或被其他代码共享)时,请使用它们