如果我有以下回调函数:
a(function () {
b()
})
我的理解是,A将首先执行,然后B完成后
,但通常在编程中,您将参数传递到paranthess中的函数,对吗?因此,在此功能中,您似乎正在通过
function () {
b()
}
函数a作为参数。因此,根据我对编程的了解,A应该以所有这些论点为由执行吗?
但是,根据我对回调的了解,这意味着,所有这些函数都执行后所有这些执行。你能看到矛盾吗?另外,如果没有参数,函数不会执行?
do参数在JavaScript中的工作方式不同。默认情况下,括号中的所有内容是否在功能本身之后执行?
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();
}
}