js 异步执行_js执行机制:同步与异步(宏任务与微任务)
- 关于JavaScript,我们需要了解js是一门单线程语言,一切js版的多线程都是用单线程模拟出来的!!而单线程则意味着,所有任务都需要进行排队,前一个任务结束,才会执行后一个任务,如果前一个任务耗时时间过长,后一个任务就不得不一直等着。
- 为了解决上述所出现的问题,而又遵循js是单线程语言的原则,js语言开发者就想到提出将所有要执行的任务分为同步任务与异步任务
- 同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,后一个任务才可以执行
- 异步任务:不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该异步任务才会进入主线程进行执行。
- 宏任务:包括script(整体代码)、setTimeout、setInterval、IO、ui交互事件、postMessage、MessageChannel、setImmediate(node.js环境)
- 微任务:Promise.then、Object.oberse、MutaionObserver、process.nextTick(node.js环境)
- 代码执行原则,先同步再异步,先宏任务,再微任务
- 具体代码详解
首先引入script标签,属于宏任务,将此任务放入到宏任务的任务队列中,而微任务的任务队列为空,主线程此时也为空,则通知主线程宏任务的队列中有要执行的异步任务,放入到
主线程中进行执行。首先遇到同步任务console.log('1'),则输出1,接着遇到宏任务setTimeout,放到宏任务队列中,标记为setTimeout1,接着继续执行,遇到微任务
process.nextTick,放到微任务队列中,标记为process1,接着继续执行,new Promise,直接执行console.log('7'),.then()被分发到微任务队列中,标记为then1,
再接着继续执行,又遇到一个宏任务setTimeOut,被放到宏任务队列中,标记为setTimeout2。
执行到这里说明script这个宏任务全部执行结束,而宏任务队列中存在setTimeout1、setTimeout2,微任务队列中存在process1、then1,
又遵循当一个宏任务执行结束之后,再执行微任务队列中的所有任务,所以要接着执行微任务队列中的process1与then1这两个微任务,而任务队列遵循着先进先出的原则,
所以先执行微任务中的process1,再执行then1这个微任务,依次输出6,8
然后微任务队列中的所用任务都执行结束了,开始下一轮的执行宏任务,依次按照上面的执行原则与顺序进行执行,就形成了一个事件循环。
最终结果输出为:1 7 6 8 2 4 3 5 9 11 10 12
以上就是个人对于js执行机制的理解,如有地方理解有误,请多指教。
js 异步执行_js执行机制:同步与异步(宏任务与微任务)相关推荐
- 【JavaScript】JS执行机制--同步与异步
目录 单线程 同步与异步 事件循环 单线程 JavaScript语言具有单线程的特点,同一个时间只能做一件事情.这是因为JavaScript脚本语言是为了处理页面中用户的交互,以及操作DOM而诞生的. ...
- JavaScript异步编程【上】 -- 同步和异步、事件循环(EventLoop)、微任务和宏任务、回调函数
文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在我们学习JavaScript中,我们知道,JavaScript的执行环境是单线程的.所谓单线程是指一次只能完成一个任务,如果有多个任务,就必须排队 ...
- Js执行机制——同步和异步
JS是单线程 JavaScript 语言的一大特点就是单线程,同一个时间只能做一件事.JavaScript 是为处理页面中用户的交互,以及操作DOM 而诞生的,比如我们对某个DOM元素进行添加和删除操 ...
- js 异步执行_js执行过程你了解多少?
来公众号:「九零后重庆崽儿」找我,一起学前端. 本文首发在: js执行过程你了解多少? - 重庆崽儿brand的个人主页www.brandhuang.com 文章自己整理自网络,如有问题欢迎在知乎或 ...
- var和function谁先优先执行_JS中如何和让异步函数优先执行?
代码如下: function fun(){ var flag = false; setTimeout(function(){ flag = true; },1000) return flag; } 比 ...
- java登录时启动后台异步线程_JAVA多线程的同步和 异步
原标题:JAVA多线程的同步和 异步 1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是 ...
- python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)
本篇文章给大家带来的内容是关于python中Tornado的同步与异步I/O的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 协程是Tornado种推荐的编程方式,使用 ...
- php做异步回合制,回合制——同步与异步
二.区别 这两种方式的不同之处大致可归纳为以下三点: 回合时间:同步回合制中每个玩家的回合是同时进行的,这一点同即时战略游戏有些相似之处(事实上即时战略也是在兵棋推演基础上发展出来):而异步回合制中每 ...
- 异步fifo_跨时钟域同步(异步FIFO)
本文使用 Zhihu On VSCode 创作并发布 跨时钟域同步(异步FIFO) 之前学习了跨时钟域下的单bit信号同步的方法,这些单bit信号多是作为控制信号或者标志信号来使用,再实际的项目中,处 ...
最新文章
- CommunityServer研习心得(转)
- 函数式编程语言python-函数式编程初探
- 618 大促背后的淘系前端技术体系
- 10分钟搭建一套代码质量监控平台,开发从此不敢摸鱼
- 用云计算机,云计算在生活中的应用
- 1.1集成电路设计基础
- sql统计表中各类型金额_各类型模具设计中“脱料结构”种类、使用范围揭秘,值得学习...
- 植物大战僵尸辅助C/C++版
- 百度地图api php开发教程,百度地图API使用方法详解,api使用方法详解_PHP教程
- [语音处理] 声谱图(spectrogram)FBank(Mel_spectrogram)MFCC(Mel倒谱)到底用哪个作为NN输入?
- 解决windows虚机系统时间与北京时间相差8小时
- AMD CPU搞编程能行吗
- 复化梯形求积公式 c语言实现 数值积分
- python小案例程序安徽工程大学专用百词斩(刚接触python不喜勿喷)
- 第7章第26节:三图排版:三张图片并列排版 [PowerPoint精美幻灯片实战教程]
- 【云周刊】第130期:阿里研究院发布新网商五大预测,2020年将诞生第一个机器人网商?
- linux下rsync命令,Linux 命令之rsync命令详解
- 九 曝光矫正与自动包围曝光
- python 统计哈姆雷特词汇频率
- 选股公式blog+节选
热门文章
- Android图片处理神器BitmapFun源码分析
- 安装MATLAB R2012B遇到问题(需要继续安装以下一个或多个产品: MATLAB 8.0 (不可用) 您必须选择已至少安装这些),已决解!...
- HDU2000 ASCII码排序【字符排序】
- UVA10427 Naughty Sleepy Boys【数学】
- 使用 Python 第三方库 daft 绘制 PGM 中的贝叶斯网络
- 程序员的底色(IDE color scheme、CLI 命令行界面)
- 机器学习竞赛(代码)
- Python Flask Web 第六课 —— 静态文件
- web 开发 —— html 与 css(div)
- MySQL 基础 —— DDL(数据定义)、DCL(数据控制)