在回调函数名称中添加括号并将其作为参数传递给函数时有什么区别。
答案 0 :(得分:3)
给定function foo() { ... }
。
foo
作为函数计算。foo(optional, arguments)
计算为调用该函数的返回值(可能是也可能不是函数,具体取决于foo
的编写方式)。答案 1 :(得分:3)
假设你有一个期望一个布尔参数的函数:
function myFunction(myBoolArg) {
// ...
}
您可以通过直接传递布尔值来调用它:
myFunction(true);
或者你可以创建一个变量,然后传递变量:
var myBoolVar = true;
myFunction(myBoolVar);
实际上它与功能相同。假设你的函数现在需要一个函数参数:
function myFunction(myCallbackArg) {
// ...
}
您可以通过直接传递函数来调用它:
myFunction(function () {
// callback body...
});
或者您可以创建变量,然后传递变量(请参阅function expression和function declaration之间的差异,以及Function.prototype.bind()
,因为this
将丢失这种情况):
var myCallbackVar = function () {
// callback body...
};
myFunction(myCallbackVar);
如果您追加()
(即myFunction(myCallbackVar())
),则首先执行myCallbackVar
,并将返回的值传递给myFunction
。只要myCallbackVar
返回一个函数,这实际上是有效的:
var myCallbackBuilder = function () {
return function () {
// callback body...
}
/*
or:
var myCallbackVar = function () {
// callback body...
};
return myCallbackVar;
*/
};
myFunction(myCallbackBuilder());
答案 2 :(得分:2)
传递callback
时,您将传递对该函数的引用。调用的函数获取对原始函数callback
当传递callback()
时,您首先执行函数callback
,然后传递该函数的返回值。