背景术语
同步执行与异步执行
同步执行
主函数的调用后的操作和子函数的返回操作的时间同步,即等待被调用任务执行完毕后,再进行调用函数后的操作。
在下面的例子中,如果call函数的执行和callee函数的执行同步,那么在callee返回someValue后,才能执行call中的some code
function call(){
function callee(){
return someValue;
}
callee();
// some code
}
异步执行
主函数的调用和子函数的返回的时间不同步,即调用函数不等待被调用函数的返回值,继续执行下一步操作。
在下面的例子中,如果call函数的执行和callee函数的执行异步,那么在callee返回someValue前,call继续执行some code
function call(){
function callee(){
return someValue;
}
callee();
// some code
}
因为JavaScript中的代码都是单线程执行,所以JS的操作和事件都必须是异步执行。
异步执行可以利用回调函数实现。
回调函数
函数也可以作为参数被传递。
回调函数执行过程中参与的函数
主函数调度其余函数的master
回调函数独立的功能函数,例如写文件函数
中间函数介于主函数和回调函数的桥梁,登记回调函数,并且通知主函数
回调函数执行的流程
- 主函数 =调用=> 回调函数
- 中间函数 =登记=> 回调函数
- =触发=> 回调函数事件
- =调用=> 回调函数
- =响应=> 回调事件
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。
在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发回调事件,店员给你打电话叫做 调用回调函数,你到店里去取货叫做响应回调事件。
回调函数实现异步执行
function callback() {
console.log('Done');
}
console.log('before setTimeout()');
setTimeout(callback, 1000); // 1000ms
console.log('after setTimeout()');
console输出台为
before setTimeOut()
after setTimeout()
Done
所以,异步操作将会在将来的某个时间点触发一个函数调用
AJAX即是异步执行的操作
var ajax = ajaxGet('http://...'