老师,您这块讲的还是不够深入呀

来源:4-9 event-loop - 总结

东风破

2019-06-10

事件轮询这里的宏任务和微任务都没讲

写回答

2回答

双越

2019-06-12

先补充了一段微任务和宏任务的区别,后续我会重新整理并以合适的形式发出来。有问题可以随时回复我。

0
0

双越

2019-06-12

微任务和宏任务

介绍

// demo

function test() {    console.log('start'),
   setTimeout(() => {        console.log('setTimeout 1')
   })
   setTimeout(() => {        console.log('setTimeout 2')
   })    Promise.resolve().then(() => {        console.log('promise 1')
   }).then(() => {        console.log('promise 2')
   })    console.log('end')
}
test()

  • 宏任务:setTimeout setInterval DOM 事件

  • 微任务:Promise(对于前端来说)

  • 微任务比宏任务执行的更早

event loop 和 DOM 渲染

  • 先回顾 event loop 的过程

  • 每一次 call stack 结束,都会触发 DOM 渲染

  • 然后再进行 event loop

const $p1 = $('<p>一段文字</p>')const $p2 = $('<p>一段文字</p>')const $p3 = $('<p>一段文字</p>')
$('#container')
           .append($p1)
           .append($p2)
           .append($p3)console.log('length',  $('#container').children().length )
alert('本次 call stack 结束,尚未触发 DOM 渲染')


宏任务和微任务的区别

  • 宏任务:DOM 渲染后再触发

  • 微任务:DOM 渲染前会触发

// 修改 DOM

const $p1 = $('<p>一段文字</p>')const $p2 = $('<p>一段文字</p>')const $p3 = $('<p>一段文字</p>')
$('#container')
   .append($p1)
   .append($p2)
   .append($p3)// // 微任务:DOM 渲染之前执行// Promise.resolve().then(() => {//     const length = $('#container').children().length//     alert(`micro task ${length}`)// })// 宏任务:DOM 渲染之后执行setTimeout(() => {    const length = $('#container').children().length
   alert(`macro task ${length}`)
})


总结

  • 微任务和宏任务的介绍

  • 微任务会更早被执行


0
0

前端跳槽必备 一线互联网公司高级前端JavaScript面试

视频讲解前端面试中的JS高级知识点,扩展JS知识深度,从容面试

1621 学习 · 218 问题

查看课程