这是怎么回事那里是匿名函数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()
将返回任何结果,因为匿名函数不返回一个值(要准确:在JavaScript中每个函数调用返回至少undefined
,但这是一个技术细节)。 它甚至可以立即通过把括号在它到底叫:
a = function() { return next(); }() // value of a will be 5
添加return
存在将确保的next()
返回值将通过匿名函数传递。
这应该清楚为什么
$("#next").click(function(){ next(); });
工作,为什么
$("#next").click(next());
不大,但
$("#next").click(next);
将是一个很好的解决方案。
通过在函数名称后面加上括号来执行函数,并将函数的返回值指定为回调函数而不是函数本身。 –