我理解将一个函数传递给另一个函数作为回调并让它执行,但我不理解这样做的最佳实现。我正在寻找一个非常基本的例子,如下:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
// Do something with param1 and param2.
if ( arguments.length == 3 ) {
// Execute callback function.
// What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
// When this anonymous function is called, execute it.
});
}
};
在myFirstFunction中,如果我确实返回了新的callback(),那么它会起作用并执行匿名函数,但这对我来说似乎不是正确的方法。
答案 0 :(得分:131)
你可以说
callback();
如果您想在回调中调整call
的值,也可以使用this
方法。
callback.call( newValueForThis);
在函数this
内部将是newValueForThis
。
答案 1 :(得分:89)
您应该检查回调是否存在,并且是可执行函数:
if (callback && typeof(callback) === "function") {
// execute the callback, passing parameters as necessary
callback();
}
许多库(jQuery,dojo等)对其异步函数使用类似的模式,并为所有异步函数使用node.js(nodejs通常将error
和data
传递给回调)。查看他们的源代码会有所帮助!
答案 2 :(得分:34)
执行功能有三种主要可能性:
var callback = function(x, y) {
// "this" may be different depending how you call the function
alert(this);
};
您选择的方法取决于:
答案 3 :(得分:6)
回调是关于信号的,而“新”是关于创建对象实例。
在这种情况下,执行“callback();”会更合适。比“返回新的回调()”因为你没有做任何带有返回值的事情。
(而且arguments.length == 3测试非常笨重,fwiw,最好检查回调参数是否存在并且是一个函数。)
答案 4 :(得分:6)
正确的实施方式是:
if( callback ) callback();
这使得回调参数可选..
答案 5 :(得分:2)
您可以使用:
if (callback && typeof(callback) === "function") {
callback();
}
以下示例更为全面:
function mySandwich(param1, param2, callback) {
alert('Started eating my sandwich.\n\nIt has: ' + param1 + ', ' + param2);
var sandwich = {toppings: [param1, param2]},
madeCorrectly = (typeof(param1) === "string" && typeof(param2) === "string") ? true : false;
if (callback && typeof(callback) === "function") {
callback.apply(sandwich, [madeCorrectly]);
}
}
mySandwich('ham', 'cheese', function(correct) {
if(correct) {
alert("Finished eating my " + this.toppings[0] + " and " + this.toppings[1] + " sandwich.");
} else {
alert("Gross! Why would I eat a " + this.toppings[0] + " and " + this.toppings[1] + " sandwich?");
}
});
答案 6 :(得分:1)
function checkCallback(cb)
{
if(cb || cb!='')
{
if(typeof window[cb] === 'undefined') alert('Callback function not found.');
else window[cb].call(this,Arg1, Arg2);
}
}
答案 7 :(得分:1)
你可以看看这个链接,我为你添加一个基本的例子来解释javascript中的回调函数。 jsfiddle
var x=0;
function testCallBack(param1, param2, callback) {
alert('param1= ' + param1 + ', param2= ' + param2+' X='+x);
if (callback && typeof(callback) === "function") {
x+=1;
alert("Calla Back x= "+x);
x+=1;
callback();
}
}
testCallBack('ham', 'cheese',function(){
alert("Function X= "+x);
});