如果我有以下回调函数:
a(function () {
b()
})
我的理解是a将首先执行,然后b一旦完成
但通常在编程中,你将参数传递给parantheses中的函数吗?所以在这个函数中,好像你正在传递
function () {
b()
}
将函数a作为参数。那么根据我对编程的了解,a应该以所有这些作为参数执行吗?
然而根据我对回调的了解,它意味着所有这些都在函数执行后执行。你能看到矛盾吗?另外,如果没有参数,函数a不会被执行吗?
参数在javascript中的工作方式不同。默认情况下,括号中的所有内容是否都在函数本身后执行?
答案 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();
}
}