【js】js执行机制-js单线程-同步和异步
js是单线程
即同一个时间只能做一件事,JavaScript是为处理页面中用户的交互,以及操作DOM而诞生的。比如我们对某个DOM元素进行添加和删除操作,不能同时进行。应该先进行添加,之后在进行删除。
单线程就意味这所有任务都需要排队,前一个任务结束才会执行后一个任务,这样所导致的问题就是:如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
同步和异步

解决上述问题,利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,于是,JS中出现和同步和异步
- 同步任务都在主线程执行,形成一个执行栈。
- JS的异步是通过回调函数实现的。一般而言,异步任务有以下三种类型:
- 普通事件,click,resize等
- 资源加载,load,error等
- 定时器,setInterval,setTimeout等
- 异步任务相关回调函数添加到任务队列中(任务队列也称消息队列)
- 先执行执行栈中的同步任务。
异步任务(回调函数)放入任务队列中。
一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。
看案例






【js】js执行机制-js单线程-同步和异步的更多相关文章
- 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)
首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单 ...
- JS 引擎执行机制
JS JS 是单线程语音 JS 的 Event Loop 是 JS 的执行机制.类似于 Android Handler 消息分发机制 JS 单线程 技术的出现都跟现实世界里的应用场景密切相关 JS 单 ...
- JS代码执行机制
JS代码从编译到执行 我们写出一段JS代码,JS的引擎并不是按照我们书写的顺序从上到下顺序编译并且执行的,首先是按照自己的规则对我们的代码先进行编译,然后从上到下执行编译的代码. 在全局作用域中,JS ...
- js的执行机制
遇到一个问题,因为自己本身就是菜鸟的原因,弄懂了还是很高兴的. console.log(a) function a() { return "this is function" } ...
- 0182 JavaScript执行机制:单线程,同步任务和异步任务,执行栈,消息队列,事件循环
以下代码执行的结果是什么? [结果是1 2 3 ] console.log(1); setTimeout(function () { console.log(3); }, 1000); console ...
- 小tips:在JS语句执行机制涉及的一种基础类型Completion
看一个如下的例子.在函数 foo 中,使用了一组 try 语句.在 try 中有 return 语句,finally 中的内容还会执行吗? function foo(){ try{ return 0; ...
- js中的callback(阻塞同步或异步时使用)
1.回调就是一个函数的调用过程,函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b, 那么这个过程就叫回调 eg. function a(callback){ alert('paren ...
- js为什么是单线程的?10分钟了解js引擎的执行机制
深入理解JS引擎的执行机制 1.JS为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4.说说setT ...
- JS 引擎的执行机制
关于JS引擎的执行机制,首先牢记2点: .JS是单线程语言 JS的Event Loop是JS的执行机制.深入了解JS的执行,就等于深入了解JS里的event loop 关于单线程相对还比较好理解,就是 ...
- JS学习笔记:(三)JS执行机制
首先我们先明确一点:JavaScript是一门单线程语言.单线程也就是说同一时间只能执行一个任务,所有的任务都必须排队顺序执行.那么如果一个任务耗时很长,阻塞了其它任务的执行,就会给用户造成不友好的体 ...
随机推荐
- HarmonyOS基础
目录 自适应布局 自适应拉伸布局 自适应缩放 自适应延伸 组件多态 ArkUI开发框架 基础组件 Text组件和Span组件 参考 参考:harmonyos3: 鸿蒙ArkUI eTS教程配套源码 参 ...
- disp
str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg); disp(s ...
- Qt开发环境的建立
在建立开发环境之前,先来了解一下Qt是什么以及它的历史变迁.Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序, ...
- vscode 部分替换(正则替换)
1. 数字 \d{n} 2. 数字和字母 [A-Za-z0-9]{n} 常用运算符与表达式 ^ 开始 () 域段 [] 包含,默认是一个字符长度 [^] 不包含,默认是一个字符长度 {n,m} 匹配长 ...
- CF1528D It's a bird! No, it's a plane! No, it's AaParsa!
个人思路: floyd 求最短路,\(\Theta(n^3)\) 不能维护边的变化. 然后就不会做了. 正解: 首先,对于每个起始点,到达一个点 \(v\) 越早越好,因为可以等待. 边的变化相当于每 ...
- drf从入门到飞升仙界 07
认证组件 ## 认证组件逻辑 # 1.登录认证的限制: - 访问接口,有的需要登陆后才能访问,有的接口,不登录就能访问 # 2.准备: -User表 : 存储用户名,密码 -UserToken表:存储 ...
- 安卓开发学习10-1:数据存储:Shared Preferences存储
解析 什么是Shared Perferences 应用场景 配置信息 主题信息 游戏的积分信息等 存储路径 在本应用中的data-data-应用包-自定义名称xml文件下保存写入的数据信息 使用 获取 ...
- Hook新特性(一)
基础Hook 1.useState const [state, setState] = useState(initialState); //返回一个state变量,指为initialState,set ...
- pyhon&QT编译
1.编译qrcpyrcc5 -o ico_rc.py ./ico/ico.qrc.qrc文件格式<RCC> <qresource prefix="/"> & ...
- java 图片BASE64 转字节流 byte[]
String base64Url = base64UrlArray.get(0)+"";BASE64Decoder decoder = new BASE64Decoder();re ...