JavaScript 事件循环(1) —— 从 setTimeout 说起
转变认知
setTimeout 可能是很多前端工程师爱用的方法,它可以使得一段代码延迟执行,例如:
setTimeout(() => console.log('A'), 1000); // 在1秒后打印出'A'
不过我们的理解可能在某些时候遭遇挑战,假定有如下代码:
for (var i = 0; i < 1e9; i++) {
}
setTimeout(() => console.log('A'), 1000);
如果运行上述代码,你会发现等待的时间明显大于1秒,你可能会认为是前面的for循环执行需要一定的时间,setTimeout需要等待前面的任务执行完毕,所以大于1秒,如果我们把for和setTimeout调换一下位置,应该就可以了:
setTimeout(() => console.log('A'), 1000);
for (var i = 0; i < 1e9; i++) {
}
接着运行上面的代码,你会发现和之前一样,我们还是得等待1秒以上的时间才看到A被打印出来,甚至,我们可以试试看下面的代码:
setTimeout(() => console.log('A'), 0); // 0秒后就打印字母A,这下总该立即打印出来了吧
for (var i = 0; i < 1e9; i++) {
}
不过事与愿违,我们看到此时字母A还是在明显大于1秒后才被打印出来,到底发生了什么呢?
首先我们要纠正一下自己对于 setTimeout 的感性认识:setTimeout 的第二个时间参数x,并不一定能保证第一个参数(回调函数)在经过x的时间后立即被执行
JavaScript 事件循环(1) —— 从 setTimeout 说起的更多相关文章
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)
JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...
- JavaScript 事件循环
JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...
- 深入理解 JavaScript 事件循环(一)— event loop
引言 相信所有学过 JavaScript 都知道它是一门单线程的语言,这也就意味着 JS 无法进行多线程编程,但是 JS 当中却有着无处不在的异步概念 .在初期许多人会把异步理解成类似多线程的编程模式 ...
- 深入理解 JavaScript 事件循环(二)— task and microtask
引言 microtask 这一名词是 JS 中比较新的概念,几乎所有人都是在学习 ES6 的 Promise 时才接触这一新概念,我也不例外.当我刚开始学习 Promise 的时候,对其中回调函数的执 ...
- javascript事件循环机制 浅尝手记
引入 众所周知Javascript是一个单线程的机制,虽然可以依托多线程的浏览器实现页面如何实现页面复杂的渲染.事件响应,但仍不会改变其单线程的本质:所以对于js的事件循环机制的了解是一个前端人员的必 ...
- JavaScript事件循环(Event Loop)机制
JavaScript 是单线程单并发语言 什么是单线程 主程序只有一个线程,即同一时间片断内其只能执行单个任务. 为什么选择单线程? JavaScript的主要用途是与用户互动,以及操作DOM.这决定 ...
- JavaScript事件循环机制
事件循环 事件循环不仅仅包含事件队列,而是具有至少两个队列,除了事件,还要保持浏览器执行的其他操作.这些操作被称为任务,并且分为两类:宏任务(或通常称为任务)和微任务. 单次循环迭代中,最多处理一个宏 ...
- [浏览器事件循环] javaScript事件循环 EventLoop
前言 Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理. 先熟悉基本概念 [堆Heap] 堆是一种数据结构 ...
- 深入理解JavaScript事件循环机制
前言 众所周知,JavaScript 是一门单线程语言,虽然在 html5 中提出了 Web-Worker ,但这并未改变 JavaScript 是单线程这一核心.可看HTML规范中的这段话: To ...
随机推荐
- 分享一些访问之后显示本机公网ip的url地址
http://ip.42.pl/raw https://api.ip.sb/ip http://ip.3322.net http://ip.qaros.com http://ip.cip.cc htt ...
- .NET 7 预览版 1 发布
宣布 .NET 7 预览版 1 Jeremy 2022 年 2 月 17 日 今天,我们很高兴地宣布 .NET 历史上的下一个里程碑.在庆祝社区和 20 年创新的同时,.NET 7 Preview 1 ...
- 黑客高端de浏览器使用秘籍
搜索引擎已经成为上网必不可少的工具之一,聪明的黑客们发现,搜索引擎也能成为发动网络攻击的工具. Google Hacking,原指利用Google搜索引擎搜索信息来进行入侵的技术和行为,如今已不再局限 ...
- 上架打包错误:error itms-90086
这是一个很纠结的错误 大家第一反应肯定是 赶紧去看看 位数是否设置 然后发现没有问题 就开始懵逼了 (比如我) 然而无意看到了一个人写的简书 这个人在 Overflow 找到了一个答案 比如你选择 ...
- k8s核心资源之:名称空间(ns)
简介 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或者用户组. 常见的pod.service.replicaSet和deployment等都是属于某一个namespac ...
- ASP.NET Core 6框架揭秘实例演示[12]:诊断跟踪的进阶用法
一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根据当前的运行状态预知未来可能发生的问题,并将问题扼杀在摇篮中.诊断跟踪能够帮助我们有效地纠错和排错&l ...
- 操作指南:如何利用Smartbi、Tableau实现地图可视化展示
优秀的地图分析是高信息量与美感兼具的.以往制作地图分析基本都需要依靠编程,制作的门槛比较高,制作也比较复杂.如果有一款只需要套入地理经纬度数据或区域名称,就能自动识别定位出相应位置的地图可视化工具是不 ...
- javaweb添加日常基本依赖
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql ...
- 基于Netty的一个WeoSocket通信服务器与客户端代码(非JS代码)
基于Netty的一个WeoSocket通信服务器与客户端代码(非JS代码) 咳咳,在这里呢,小轩就不多说什么是WebSocket的,还有呢,小轩为什么不给出JS-Client代码?网上太多代码可以用了 ...
- Python:Scrap爬虫过程中遇到的各种错误
1.KeyError: 'Spider not found: BDS' 原因:settings.py中缺少了几项与spider名字配置相关的项: BOT_NAME = 'BDS' SPIDER_MOD ...