Javascript (为什么)jQuery.click()需要回调函数吗?
我有以下jQuery代码: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
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);