面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!
目录
事件循环
什么是事件循环?
答:1.从宏任务的头部取出一个任务执行;2.执行过程中若遇到微任务则将其添加到微任务的队列中;3.宏任务执行完毕后,微任务的队列中是否存在任务,若存在,则挨个儿出去执行,直到执行完毕;4.GUI线程渲染;这 4 步构成了一个事件的循环检测机制,即我们所称的eventloop。
宏任务有哪些?
答:script(整体代码)、setTimeout、setInterval、UI交互事件。
微任务有哪些?
答:Promise.then、MutationObserver、async/await。
事件循环的笔试题?
console.log('start');
setTimeout(() => {
console.log('children2');
Promise.resolve().then(() => {
console.log('children3');
})
}, 0);
new Promise(function(resolve, reject) {
console.log('children4');
setTimeout(function() {
console.log('children5');
resolve('children6')
}, 0)
}).then((res) => {
console.log('children7');
setTimeout(() => {
console.log(res);
}, 0)
})
答案:startt、children4、children2、children3、children5、children7、children6
面试大白话
答:首先,js是单线程的,它的运行机制是1.从宏任务的头部取出一个任务执行;2.执行过程中若遇到微任务则将其添加到微任务的队列中;3.宏任务执行完毕后,微任务的队列中是否存在任务,若存在,则挨个儿出去执行,直到执行完毕;4.GUI线程渲染;这 4 步构成了一个事件的循环检测机制,即我们所称的eventloop。