Big*_*337 0 javascript asynchronous callback
如果我有以下回调函数:
a(function () {
b()
})
Run Code Online (Sandbox Code Playgroud)
我的理解是,首先执行a,然后执行b
但通常在编程中,您将参数传递给parantheses中的函数吗?所以在这个函数中,好像你正在传递
function () {
b()
}
Run Code Online (Sandbox Code Playgroud)
函数a作为参数.那么根据我对编程的了解,a应该以所有这些作为参数执行吗?
然而根据我对回调的了解,它意味着所有这些都在函数执行后执行.你能看到矛盾吗?那么,如果没有参数,函数a不会被执行吗?
参数在javascript中的工作方式不同.默认情况下,括号中的所有内容是否都在函数本身后执行?
该a()函数必须有一个实际上是回调的参数,它不仅仅是自动工作
function a(callback) { // callback argument
// do lots of stuff
callback(); // call the function after stuff has been done
}
a(function() {
b();
});
Run Code Online (Sandbox Code Playgroud)
你也可以这样做
a(b);
Run Code Online (Sandbox Code Playgroud)
并将参数传递给回调
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
});
Run Code Online (Sandbox Code Playgroud)
这对异步行为特别有用
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
});
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,$ .ajax返回一个更方便使用的承诺,但它显示了回调如何与异步函数一起使用.
作为旁注,您经常会看到无法保证回调的代码,然后在尝试执行它以避免错误之前检查是否有作为参数传递的回调函数是有意义的.
function a(callback) { // callback argument
// do lots of stuff
if (typeof callback === 'function') {
callback();
}
}
Run Code Online (Sandbox Code Playgroud)