回调函数 – 使用括号
我是jQuery的新手,对使用(或不使用)括号函数的括号感到困惑。 说我有一个function:
function cb() { // do something }
现在有什么区别:
$("p").hide(1000, cb);
和
$("p").hide(1000, cb());
是否与cb函数执行时有关? 如果有人能用最简单的术语向我解释这一点,那就太好了。
cb()
表示给我执行函数cb的结果。
cb
是函数cb ,更准确地说是指针(引用)。
是否与cb函数执行时有关?
基本上,是的,虽然差异确实比这更深。
-
cb
是对函数的各种引用。 你将函数作为一个参数传递给要在某个地方调用的参数。 -
cb()
是一个函数调用; 将调用该函数,并将结果作为参数传递给.hide
。
$("p").hide(1000, cb);
传递cb
引用的函数作为回调。
$("p").hide(1000, cb());
传递调用函数cb
时返回的值。
鉴于:
function cb(){ return true; }
前者正在通过回调以便以后调用。 后者传递返回值true
,基本上是$("p").hide(1000, true);
不同之处在于,javascript函数是第一类对象,可以传递给其他函数,以便它们可以在稍后阶段执行或依赖于某些逻辑。
考虑以下:
function add(a, b) { return a + b; } function minus(a, b) { return a - b; } function apply(func, a, b) { return func(a,b); } apply(add, 3, 4); // returns 7 apply(minus, 3, 4); // returns -1 apply(add(), 3, 4); // error: invalid number of arguments for add apply(add(0,0), 3, 4); // error: add returns 0, but 0 is not a function and // so apply crashes when it tried to call zero as a function