【发布时间】:2011-10-23 14:42:50
【问题描述】:
我有一个自定义函数,我想向它添加一个回调函数,我查看了其他问题,但我真的找不到我的问题的答案。所以基本上它看起来像这样:
function myfunction() {
// something
}
我有一个不同的函数,我想作为回调触发,最终我想像这样调用 myfunction:
myfunction(callback());
那么谁能告诉我如何做到这一点?
【问题讨论】:
我有一个自定义函数,我想向它添加一个回调函数,我查看了其他问题,但我真的找不到我的问题的答案。所以基本上它看起来像这样:
function myfunction() {
// something
}
我有一个不同的函数,我想作为回调触发,最终我想像这样调用 myfunction:
myfunction(callback());
那么谁能告诉我如何做到这一点?
【问题讨论】:
你可以这样调用它(将回调函数作为参数传递):
myfunction(myCallbackFn);
请注意,在将函数引用作为参数传递时,函数名后面没有括号。这不会调用函数,而只是传递对它的引用,以后可以从您的自定义函数中调用它。
你会定义你的函数,然后像这样在其中调用回调函数:
function myfunction(cb) {
cb(arg1, arg2);
}
请注意,有多种方法可以从您的自定义函数中实际调用回调函数。如果您只需要正常调用它而不关心this 参数,您可以使用:
cb();
如果你想设置 this 参数,你可以使用这个:
cb.call(thisArg, arg1, arg2);
如果你想传递你当前的参数或传递一个参数数组并设置this 参数,你可以使用这个:
cb.apply(thisArg, argArray);
您当前的代码在该区域存在 javascript 错误:
test(rand_gyumolcs, link, callback){
callback();
};
这不是合法的javascript。我不知道您要做什么,但这看起来像是函数声明的一半和函数调用的一半。如果你只是想调用测试函数,你只需使用这个:
test(rand_gyumolcs, link, callback);
在test里面,如果想在动画完成后调用回调函数,那么你就得钩住动画的完成函数,然后调用回调。
【讨论】:
completion function。查看doc for the jQuery animate function,你会看到最后一个参数是一个回调函数,当动画完成时会被调用。您需要将该回调函数作为参数提供给您的gyum_mozgas2 函数,然后将其传递给该函数中的.animate() 调用。 animate() 函数将在动画完成时调用它。
这是一个带有返回值的回调示例,该返回值也采用输入参数:
function test2(arg1, arg2, callback) {
var result = callback(arg1, arg2);
alert('arg1=' + arg1 + ', arg2=' + arg2 + ', result=' + result);
}
test2(1, 2, function(a, b) { return a + b; });
【讨论】:
function myfunction(callback) {
// something
callback();
}
myfunction(callback);
请注意,我没有调用回调,只是将它作为函数引用传递给我的函数。然后我在最后的函数中调用它,或者在你想做的任何地方调用它。
【讨论】:
这是您在 javascript 中使用回调的另一种方式,此方法可确保您可以根据从回调中获得的结果安全地执行条件。
// Function call.
validateCondition(function(isValid){
if(isValid) {
executeThisFunction();
} else {
// Do something else.
}
});
function validateCondition(callback) {
var isvalid = true;
// some calculation to check isValid.
callback(isValid);
}
【讨论】: