Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
Javascript (为什么)jQuery.click()需要回调函数吗?_Javascript_Jquery_Html - Fatal编程技术网

Javascript (为什么)jQuery.click()需要回调函数吗?

Javascript (为什么)jQuery.click()需要回调函数吗?,javascript,jquery,html,Javascript,Jquery,Html,我有以下jQuery代码: function next() { //some code here } function previous() { //some code here } $("#next").click(function(){ next(); }); $("#previous").click(function(){ previous(); }); 这是可行的,但这不是: $("#next").click(next()); $("#previ

我有以下jQuery代码:

function next() {
    //some code here
}

function previous() {
    //some code here
}

$("#next").click(function(){
    next();
});

$("#previous").click(function(){
    previous();
});
这是可行的,但这不是:

$("#next").click(next());

$("#previous").click(previous());
为什么会这样?我的代码中是否有问题,或者这只是jQuery的一个问题?注意:
#next
#previous
指的是我的html文件中的两个按钮。

这起作用(如果定义了函数
next
previous
):

$(“#下一步”)。单击(下一步);
$(“#上一页”)。单击(上一页);
在这种情况下,
next
previous
也是回调函数,两者的区别是

当你打这个电话的时候

$(“#下一步”)。单击(下一步()该函数立即执行,您将下一个函数的结果传递给jQuery的eventHandler

在这种情况下

$(“#下一步”)。单击(下一步)将函数next传递给jQuery的EventHandler


顺便说一句:在jQuery API文档()中,它显示了单击函数的所有参数以及它声明的所需类型:“…处理程序类型:函数(事件事件对象)每次触发事件时要执行的函数…”“

像这样尝试,您将得到答案

function next() {
    //some code here
}

function previous() {
    //some code here
}

$("#next").click(next);

$("#previous").click(previous);

工作演示

回调应该是函数的
引用

为什么
$(“#下一步”)。单击(下一步()不起作用

func()


这个,

在需要传递参数的情况下,这是一种更好的方法

否则,


匿名函数
function(){…}
的语法有点模糊。你所做的就是传递一个函数,而不是调用它。我想解释一下它是如何工作的:

如果你有一个简单的函数

function next() { return 5 };
如果您从某处调用它,它将只返回值5:

a = next(); // value of a will be 5
但您也可以将整个函数传递给
a
。这是可能的,因为JavaScript中的函数实际上是对象:

a = next;
b = a();    // value of b will be 5
如果您看一下语法,它会告诉您,在函数末尾放上括号
()
,将调用函数并返回返回值。而不带括号的裸字符串则将函数本身交给您

那么,现在什么是回调,
click()
希望得到什么作为参数呢?回调函数是以后调用的函数;我们实际上是把它交给别人,以后再打电话
click()
希望获得这样一个函数作为参数,现在应该很清楚,我们必须传递不带括号的函数,以便启用
click()
以后调用它,而不是只向它传递
5

$("#next").click(next);
那么匿名函数的初始语法是如何工作的呢

function() { next(); }
实际上,将您的
next()
包装到另一个匿名函数中,因为它没有名称,但其工作方式与命名函数相同。您甚至可以通过它设置变量:

a = function() { next(); }  // a will be the anonymous function that calls next()
但是调用该函数
a()。
甚至可以通过在其末尾添加括号来立即调用:

a = function() { return next(); }()   // value of a will be 5
在那里添加
return
将确保
next()
的返回值将通过匿名函数传递

这应该说明原因

$("#next").click(function(){ next(); });
他在工作,为什么

$("#next").click(next());
不是,而是

$("#next").click(next);

将是一个很好的解决方案。

$(“#下一步”)。单击(下一步);会有用的。请注意,不需要括号,因为函数/回调处理程序应作为参数传递。

在函数名后放括号,执行函数并将函数的返回值指定为回调,而不是函数本身。为什么对所有答案都投反对票?如果有改进的余地,每个人都可以自由地澄清或编辑asnwer。为什么要投否决票?我写了什么不正确的东西吗?我怎样才能改进我的答案?
$("#next").click(next());
$("#next").click(next);