美文网首页
前端面试笔关于事件循环

前端面试笔关于事件循环

作者: 前端又又 | 来源:发表于2020-03-22 16:55 被阅读0次

面试的时候遇到这样一个问题:

输出结果如下:

1、JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事,所以计算是从上而下的,所以先输出script begin;

2、为了防止js在执行多个任何的时候,耗时长,造成阻塞,所以js语言将任务执行模式分为同步和异步,其实定时器、promise回调,async,事件的绑定等都属于异步操作。只要在函数名之前加上async关键字,就表明这个函数内部有异步操作,但是它和普通函数的区别也只是返回的是promise。

对于await来说:分两种结果

如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为 await表达式的结果

如果它等到的是一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。

3、所以遇到await之后先执行外面的同步代码,对于promise来说promise实例中是同步操作,promise的回调函数里面是异步操作,所以输出5555。同步代码执行完之后,回到async内部执行。

4、对于定时器和promise需要依赖事件循环的宏任务和微任务来解释。

先遇到setTimeout,那么将其回调函数注册后分发到宏任务Event Queue。

接下来遇到了Promise,new Promise立即执行,then函数分发到微任务Event Queue。

遇到console.log(),立即执行。

好啦,整体代码script作为第一个宏任务执行结束,看看有哪些微任务?我们发现了then在微任务Event Queue里面,执行。

ok,第一轮事件循环结束了,我们开始第二轮循环,当然要从宏任务Event Queue开始。我们发现了宏任务Event Queue中setTimeout对应的回调函数,立即执行。

所以微任务会早与宏任务执行。

相关文章

  • 前端面试笔关于事件循环

    面试的时候遇到这样一个问题: 输出结果如下: 1、JavaScript 语言的一大特点就是单线程,也就是说,同一个...

  • 面试遇到的问题

    2019 web 前端面试总结(内附面经) js事件循环(EventLoop) 浏览器缓存 BFC js基本类型 ...

  • 需要被马住的一些链接

    vue源码实现v-if事件循环可参考的面经,二面挂全部是算法的面经腾讯云实习面经新鲜微信广州面经19年微信前端社招...

  • Flutter/Dart中的异步

    前言 我们所熟悉的前端开发框架大都是事件驱动的。事件驱动意味着你的程序中必然存在事件循环和事件队列。事件循环会不停...

  • 关于事件循环

    首先,js 是单线程的语言,eventloop是js的执行机制,在不同的运行环境(浏览器或Nodejs)下,执行顺...

  • 聊一聊浏览器事件循环与前端性能

    在网上也看了不少关于javascript事件循环的文章,多数是以浏览器事件循环与nodejs中事件循环做对比,分析...

  • JavaScript 的事件循环

    一道有关事件循环的前端面试题: 这道题主要考察的是事件循环中函数执行顺序的问题,其中包括async ,await,...

  • CSS面试笔试题

    CSS前端面试 系列文章: HTML及HTTP面试笔试题JavaScript面试笔试题 1.CSS有什么书写顺序?...

  • JavaScript面试笔试题

    JavaScript前端面试 系列文章: HTML及HTTP面试笔试题CSS面试笔试题 JS一些算法题: FE-i...

  • 关于js循环添加事件的几种方法总结

    js解决循环添加事件的几种方法小总结 平日里有点问题也会思考思考,比如循环添加事件的这个梗,初入前端的朋友可能就会...

网友评论

      本文标题:前端面试笔关于事件循环

      本文链接:https://www.haomeiwen.com/subject/rioyyhtx.html