首先什么宏任务和微任务
- 宏任务:setTimeout , setInterval , Ajax , Dom 事件
- 微任务:Promise , async / await
- 执行顺序:微任务要比宏任务要早(优先执行微任务)
- js:最先执行同步操作,微任务,宏任务,
异步和同步的区别
- 异步不会阻塞程序的执行,
- 同步会阻塞程序的执行,
- 前端使用异步的场景
- 定时任务:setTimeout,setInverval
- 网络请求:ajax请求,动态《img》加载
事件绑定:
console.log('start')
$.get('./data1.json',function(data1){
console.log(data1)
})
console.log('end')
console.log('start')
var img = document.createElement('img')
img.onload=function(){
console.log('loaded')
}
img.src='/xxx.png'
conlose.log('end')
事件绑定
console.log('start')
document.getElementById('btn1').addEventListener('click',function(){
alert('clicked')
})
conlose.log('end')
- 也就是请求处理过程中,你不能闲着,会产生异步的请求,回头再处理,然后继续执行下面的请求
同步异步问题
- 首先,你要知道javascript是单线程语言。js任务需要排队顺序执行,如果一个任务耗时过长,后边一个任务也的等着,但是,假如我们需要浏览新闻,但新闻包含的超清图片加载很慢,总不能网页一直卡着直到图片完全出来,所以将任务设计成了两类:
同步和异步
- js的执行机制为遇到宏任务先放入任务队列然后在执行微任务