你能解释一下这个Javascript回调函数吗?

时间:2014-03-06 20:19:18

标签: javascript asynchronous callback

如果我有以下回调函数:

a(function  () {
  b() 
})

我的理解是a将首先执行,然后b一旦完成

但通常在编程中,你将参数传递给parantheses中的函数吗?所以在这个函数中,好像你正在传递

function  () {
  b() 
}

将函数a作为参数。那么根据我对编程的了解,a应该以所有这些作为参数执行吗?

然而根据我对回调的了解,它意味着所有这些都在函数执行后执行。你能看到矛盾吗?另外,如果没有参数,函数a不会被执行吗?

参数在javascript中的工作方式不同。默认情况下,括号中的所有内容是否都在函数本身后执行?

1 个答案:

答案 0 :(得分:5)

a()函数必须有一个实际上是回调的参数,它不仅仅是自动工作

function a(callback) {  // callback argument
    // do lots of stuff

    callback(); // call the function after stuff has been done
}

a(function() {
    b();
});

你也可以这样做

a(b);

并将参数传递给回调

function a(callback) {  // callback argument
    // do lots of stuff

    callback(param1, param2, param3);
}

a(function(param1, param2, param3) { // here we get them back
    b(param2); // and we can pass them along
});

这对异步行为

特别有用
function a(callback) {  // callback argument

    $.ajax({
        // ajax arguments
    }).done(function(returned_data) {

        callback(returned_data);

    });

}

a(function(returned_data) { // data from the ajax call
     // do something with returned_data
});

这只是一个例子,$ .ajax返回一个更方便使用的承诺,但它显示了回调如何与异步函数一起使用。

作为旁注,你经常会看到无法保证回调的代码,然后检查是否有一个回调函数作为参数传递,然后再尝试执行它以避免错误。

function a(callback) {  // callback argument
    // do lots of stuff

    if (typeof callback === 'function') {
        callback();
    }
}