总体介绍:
同步:去黄牛店铺买票,等黄牛买到票以后,拿票走人(需要任务执行完了,再执行下一任务)
异步:去黄牛店铺买票,回家后等黄牛打电话(callback)了再去拿票(不等任务执行完,直接进行下一任务)
举例
1,异步代码:代码编写顺序和执行顺序不一样
console.log(1)
setTimeout(function(){
console.log(2)
},0)
console.log(3)
2,平常的异步实例
特别注意:
var teskAsync=function(){
var result=setTimeout(function(){
console.log('异步任务结果')
},3000)
return result
}
var result=teskAsync()
otherTask()
聪明的你会发现以上的代码并不是异步执行的结果,二十一个time id。那怎么拿到结果呢,用回调
function taskAsync = function(callback){
var result = setTimeout(function(){
callback('异步任务的结果')
}, 3000)
return result
}
taskAsync(function callback(result){
console.log(result) // 三秒钟后,这个 callback 函数会被执行
})
otherTask()
3,典型的异步实例
function taskB(){
var result = $.ajax({
url:"/data.json",
async: true // 异步
})
return result // 一定要注意,现在的 result 不是上面的 response,只是个promise
}
taskA()
taskB()
taskC()
总结:1,JS引擎不会同时做两件事,例如setTimeout,A事件和B事件之间还是存在一定的事件差,异步并不强制要求两个任务同时执行
2,Ajax,可以与JS代码同时执行,因为这个不是由JS引擎负责,是由浏览器网络模块负责
网友评论