load()函数如何允许用户提供回调?

时间:2010-10-08 07:29:07

标签: javascript

在javascript中,对于库/框架来说非常流行,让我们为数据的后处理定义一个回调函数。

例如

load("5", function(element) {
    alert(element.name);
});

我想知道load()函数是如何让用户提供回调的?

有没有很好的教程?

6 个答案:

答案 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参数。