虽互不曾谋面,但希望能和您成为笔尖下的朋友

以读书,技术,生活为主,偶尔撒点鸡汤

不作,不敷衍,意在真诚吐露,用心分享

点击左上方,可关注本刊

标星公众号(ID:itclanCoder)

如果不知道如何操作

点击这里,标星不迷路

JS 里的一种任务分类方式分为: 同步任务异步任务

虽然 JS 是单线程的,但是浏览器的内核却是多线程的,在浏览器的内核中不同的异步操作由不同的浏览器内核模块调度执行,异步任务操作会将相关回调添加到任务队列中

而不同的异步操作添加到任务队列的时机也不同,比如onclick, setTimeout, ajax 处理的方式都不同

这些异步操作是由浏览器内核来执行的,浏览器内核上包含 3 种 webAPI,分别是 DOM Binding(DOM绑定)network(网络请求)timer(定时器)模块

按照这种分类方式:JS 的执行机制是

  • 首先判断 js 代码是同步还是异步,不停的检查调用栈中是否有任务需要执行,如果没有,就检查任务队列,从中弹出一个任务,放入栈中,如此往复循环,要是同步就进入主进程,异步就进入事件表
  • 异步任务在事件表中注册函数,当满足触发条件后,被推入事件队列
  • 同步任务进入主线程后一直执行,直到主线程空闲时,才会去事件队列中查看是否有可执行的异步任务,如果有就推入主进程中

以上三步循环执行,这就是事件循环(event loop),它是连接任务队列和控制调用栈的


在面试当中事件循环机制问得也比较多,如果您有疑问,欢迎评论下方留言,一起学习探讨

公众号(ID:itclanCoder)

码能让您早脱菜籍,文能让您洗净铅华

可能您还想看更多:

让自己的网站支持第三方支付能力(支持支付宝与微信支付)

手把手教你用vuepress搭建自己的网站(1)

Js篇-面试题6-聊一下强缓存与协商缓存

Js篇-面试题5-如果浏览器不支持 bind 函数,实现一个函数让其兼容

Js篇-面试题2-Promise 执行顺序问题

js中如何得到循环中的点击的这个id_Js篇面试题9请说一下Js中的事件循环机制相关推荐

  1. uni-app 【JS Framework】报错当前运行的基座不包含原生插件【xxxx】,请在manifest.json中配置该插件---uniapp原生开发006

    这个错误...最后看我是怎么解决的... 其实就是在androidStudio工程中,去添加自己开发的原生的模块,把这个模块添加进来 如果报上面的那个错可以,在这里去检查一下,看看这里有没有 把自己做 ...

  2. c语言中空格字符怎么表示_漫画:腾讯面试题,请实现把字符串中的空格替换为“%20”...

    面试现场 题目描述请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. i ...

  3. 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务

    队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...

  4. 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  5. Linux事件循环阻塞,深入浅析Node.js 事件循环、定时器和process.nextTick()

    什么是事件循环 尽管JavaScript是单线程的,但通过尽可能将操作放到系统内核执行,事件循环允许Node.js执行非阻塞I/O操作. 由于现代大多数内核都是多线程的,因此它们可以处理在后台执行的多 ...

  6. jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2

    喜欢排队吧,它能保护你的时间和精力 - 排队纪律维护员Event Loop Promise和事件循环概览图 请注意上面这张图,Promise和事件循环的那些事,将在这个图上缓缓展开. 微任务和(宏)任 ...

  7. 从一道题浅说 JavaScript 的事件循环

    阮老师在其推特上放了一道题: new Promise(resolve => {resolve(1);Promise.resolve().then(() => console.log(2)) ...

  8. 剖析nodejs的事件循环

    本文首发在github,感兴趣请点击此处 nodejs是单线程执行的,同时它又是基于事件驱动的非阻塞IO编程模型.这就使得我们不用等待异步操作结果返回,就可以继续往下执行代码.当异步事件触发之后,就会 ...

  9. 创建一个storageevent事件_事件循环:微任务和宏任务

    浏览器中 JavaScript 的执行流程和 Node.js 中的流程都是基于 事件循环 的. 理解事件循环的工作方式对于代码优化很重要,有时对于正确的架构也很重要. 在本章中,我们首先介绍有关事物工 ...

最新文章

  1. 20172307 结对编程项目-四则运算 第二周 阶段总结
  2. 操作多个表_4_查询不再另外一个表里的记录
  3. Ubuntu16.04 下 Python3 虚拟环境安装 OpenCV
  4. CSS3之border
  5. php网页制作 博客,php响应式的个人博客网站设计
  6. CSS margin 外边距 属性的位置关系
  7. Android P 消息
  8. SK海力士收购英特尔NAND闪存业务已获韩国公平贸易委员会批准
  9. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)
  10. docker打包部署nginx,django应用
  11. 短信接口怎么对接?看完这篇文章你就知道了!
  12. java档案管理系统_基于JAVA的简单档案管理系统
  13. 人工智能中常用的词汇
  14. Python 中文变量名 用中文写 Python
  15. jlink接口定义(jlink接口定义 swd4线)
  16. 使命召唤4:现代战争
  17. C#实现来电显示功能
  18. Oraclealterindexrebuild与ORA08104说明
  19. BPFT1.7,全名BaiduPanFilesTransfers免费的百度网盘批量转存工具【精】
  20. azure不支持哪些语句 sql_SQL Azure vs SQL Server

热门文章

  1. R语言数据横向合并cbind函数实战
  2. ValueError: The data property of a figure may only be assigned a list or tuple that contains a .....
  3. jupyter扩展插件Nbextensions的安装、使用
  4. R包cgdsr下载MSKCC癌症基因组数据
  5. 奇瑞s61鸿蒙,数码提前曝光,奇瑞新能源 S61 将搭载华为鸿蒙车机系统
  6. mysql5.0入门_MySQL 5.0基础的基本内容的介绍
  7. php js混淆加密工具,求混淆js加密算法解密
  8. 一个学术 导航网站----科塔学术
  9. mysql 联合索引长度_MySQL 中索引的长度的限制
  10. javascript 随机点名