在javascript中,对于库/框架来说非常流行,让我们为数据的后处理定义一个回调函数。
例如
load("5", function(element) {
alert(element.name);
});
我想知道load()函数是如何让用户提供回调的?
有没有很好的教程?
答案 0 :(得分:13)
嗯,load
函数可能如下所示:
function load(arg, callback) {
var element = { name: "foo " + arg }; // something to pass
if (typeof callback == 'function') {
callback(element);
}
}
使用typeof
检查,我们确保回调参数是一个我们可以调用的对象,一个函数。
然后你的例子:
load("5", function(element) {
alert(element.name); // Will show `"foo 5"`.
});
答案 1 :(得分:4)
在JavasScript中,函数是第一类对象。这几乎意味着它们就像其他内置类型一样。您可以将它们分配给变量,将它们传递给函数等等。
本文是一个有用的链接,解释了作为第一类对象的函数如何在JavaScript中工作: http://helephant.com/2008/08/functions-are-first-class-objects-in-javascript/
Joel Spolsky对JavaScript中使用函数作为第一类对象的一些有趣的事情/方法进行了详细而有趣的解释:http://www.joelonsoftware.com/items/2006/08/01.html
最后,由于它们是第一类对象,因此函数可以非常容易地接受其他函数作为参数:
var load = function(callback) {
// load something here
callback();
}
答案 2 :(得分:2)
function load(foo, callback) {
blah(foo);
callback();
}
答案 3 :(得分:2)
function load( number, callback){
// do something
if (callback) {
callback();
}
}
答案 4 :(得分:1)
函数就像普通类型一样,可以作为参数传递:
function load(param1, callback) {
// call the callback parameter one second later
setTimeout(function() {
callback(param1);
}, 1000);
}
答案 5 :(得分:0)
function(callback,argumentArray) {
var result = callback.apply(this,argumentArray);
}
要点:
this
可以是null
。在这种情况下,如果在回调实现中使用this
,那么它将指向Global
对象。argumentArray
实际上是回调方法所需的JavaScript Array
参数。