question:
js中的blur方法執(zhí)行是直接觸發(fā)調(diào)用blur事件處理函數(shù) 還是 將這個事件處理函數(shù)放進宏任務(wù)隊列椒振,等同步任務(wù)和微任務(wù)隊列和它前面的宏任務(wù)執(zhí)行完后才執(zhí)行該事件處理函數(shù)惫撰?
answer:
回答:答案是同步執(zhí)行的,就是說調(diào)用blur方法就相當(dāng)于在執(zhí)行事件處理函數(shù)(如果注冊了失焦事件的話)
js事件細節(jié)
使用addEventListener注冊的相同的事件多次鼓拧,在觸發(fā)的時候嗜傅,是先后把所有的處理函數(shù)放進宏任務(wù)隊列瘦锹,而不是說將所有的事件處理函數(shù)打包到一個隊列中,統(tǒng)一作為一個宏任務(wù)放進宏任務(wù)隊列方库。也就是說他們的先后執(zhí)行不是同步的结序,而是分別先后放進宏任務(wù)隊列去執(zhí)行的。
代碼如下:
window.addEventListener('keydown', (e) =>{
console.log('第一個事件')
Promise.resolve().then(()=>{
console.log('這是微任務(wù)1')
Promise.resolve().then(()=>{
console.log('這是微任務(wù)2')
})
})
console.log('第一個事件的第二個打印')
})
window.addEventListener('keydown', (e) =>{
console.log('第二個事件')
})
觸發(fā)按鍵按下事件后打印結(jié)果如下:
打印結(jié)果