question:
js中的blur方法执行是直接触发调用blur事件处理函数 还是 将这个事件处理函数放进宏任务队列,等同步任务和微任务队列和它前面的宏任务执行完后才执行该事件处理函数?
answer:
回答:答案是同步执行的,就是说调用blur方法就相当于在执行事件处理函数(如果注册了失焦事件的话)
js事件细节
使用addEventListener注册的相同的事件多次,在触发的时候,是先后把所有的处理函数放进宏任务队列,而不是说将所有的事件处理函数打包到一个队列中,统一作为一个宏任务放进宏任务队列。也就是说他们的先后执行不是同步的,而是分别先后放进宏任务队列去执行的。
代码如下:
window.addEventListener('keydown', (e) =>{
console.log('第一个事件')
Promise.resolve().then(()=>{
console.log('这是微任务1')
Promise.resolve().then(()=>{
console.log('这是微任务2')
console.log('第一个事件的第二个打印')
window.addEventListener('keydown', (e) =>{
console.log('第二个事件')
触发按键按下事件后打印结果如下: