我了解将一个函数作为回调传递给另一个函数并让其执行,但我不了解实现此目的的最佳实现。我正在寻找一个非常基本的示例,例如:
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(),则它可以工作并执行匿名函数,但这对我来说似乎不是正确的方法。
你可以说
callback();
或者,call
如果要this
在回调中调整的值,则可以使用该方法。
callback.call( newValueForThis);
函数内部this
将是任何东西newValueForThis
。
您应该检查回调是否存在,并且是可执行函数:
if (callback && typeof(callback) === "function") {
// execute the callback, passing parameters as necessary
callback();
}
许多库(jQuery的,道场等)的使用为他们的异步函数对所有异步功能类似的模式,以及node.js的(通常的NodeJS传递error
和data
回调)。查看他们的源代码会有所帮助!
执行功能主要有3种:
var callback = function(x, y) {
// "this" may be different depending how you call the function
alert(this);
};
- callback(argument_1,arguments_2);
- callback.call(some_object,arguments_1,arguments_2);
- callback.apply(some_object,[argument_1,arguments_2]);
您选择的方法取决于是否:
- 您将参数存储在数组中或作为不同的变量。
- 您想在某个对象的上下文中调用该函数。在这种情况下,在该回调中使用“ this”关键字将引用作为参数传递给call()或apply()的对象。如果您不想传递对象上下文,请使用null或undefined。在后一种情况下,全局对象将用于“ this”。
Docs for Function.call,
Function.apply
回调与信号有关,“新”与创建对象实例有关。
在这种情况下,只执行“ callback();”会更加合适。而不是“返回新的callback()”,因为您无论如何都不用返回值做任何事情。
(而且arguments.length == 3测试确实很笨拙,最好检查一下回调参数是否存在并且是一个函数。)
正确的实现是:
if( callback ) callback();
这使得回调参数是可选的。
您可以使用:
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?");
}
});
这是一个基本示例,解释callback()
JavaScript中的功能:
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);
});
function checkCallback(cb) {
if (cb || cb != '') {
if (typeof window[cb] === 'undefined') alert('Callback function not found.');
else window[cb].call(this, Arg1, Arg2);
}
}
本文地址:http://javascript.askforanswer.com/genghaodilejiejavascriptzhongdehuidiaohanshu.html
文章标签:callback , function , javascript
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
文章标签:callback , function , javascript
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!