function abc(arg1,arg2, callback){
console.log(arg1 + arg2) // I am doing something really interesting
if(callback){
callback(arg1+ arg2)
}
}
function add(){
console.log("from call back " + arguments[0])
}
var a =10;
abc(1,2, add)
这工作正常,但如果我们需要向回调发送一些额外的参数,我们该怎么办?
这里,除(arg1+ arg2)
之外,我需要从abc
的调用者到回调设置其他一些参数
而且,abc(1,2,add)
和abc(1,2,add())
之间有什么区别?
谢谢:))
答案 0 :(得分:5)
abc(1,2,add)
=>将函数参数赋予“函数类型”。这就像给出一个指向函数的指针,以便以后调用它。
abc(1,2,add())
=>调用add()
函数并将其返回值作为参数。
你是否需要回调支持而不是参数?由于JavaScript是一种动态语言,因此只需使用更多参数调用相同的回调函数:
callback(1,2,3,4)
callback(1,2,3,4,5)
callback(1,2,3,4,5,6)
。JavaScript对函数签名并不严格:函数的参数与调用者给出的参数一样多。
例如,如果你有一个这样的回调函数:
function(a, b) {
}
后来你这样称呼它:
function("hello"); // Where's the second argument??
JavaScript不会抱怨。简单地b
将是未定义的。
答案 1 :(得分:1)
add和add()之间的区别: add是一个函数,add()是函数的返回值。 如果你想获得更多的函数参数。使用arguments对象 每个函数都有一个参数对象 arguments [0] == 1参数[1] == 2参数[2] == add。
答案 2 :(得分:1)
您可以使用原始函数中的参数调用回调函数,也可以在函数调用中提供回调参数:
function f1 (args, callback, params) {
callback.apply(this, params); // Params needs to be an array
callback.apply(this, [args]); // This would call callback with 1 param - args
callback.call(this, args); // This is the same as the line above
}
function f2 () {
for (item in arguments) {
console.log(item);
}
}
f1('arg', f2, [1, 2, 3]);
如果你通过函数调用函数调用你的函数,那么它会立即进行评估,并且不会作为回调执行。
答案 3 :(得分:0)
abc(1,2,add)
和abc(1,2,add())
之间的区别在于,在第二种情况下,调用abc
的{{1}}不是add
。结果是add
比预期更快地执行,没有任何参数。
将额外参数传递给回调的常用方法是创建一个关闭参数的匿名函数:
var a=10;
var b=20;
abc(a, b, function(text){
add(a, b);
console.log(text); //logs "abc"
});