setTimeout异步执行

Arduino+NRF24L01 无线遥控舵机与无刷电机系统搭建指南 本文详细介绍了使用Arduino和NRF24L01模块搭建无线遥控系统的完整指南,涵盖舵机和无刷电机的无线控制。从硬件选型、电路连接到代码编写与调试,提供了实用技巧和常见问题解决方案,帮助DIY爱好者低成本实现稳定可靠的无线遥控应用。 阅读详情

下面这段代码想要循环昝输出结果01234,请问输出结果是否正确,如果不正确,请说明为什么,并修改循环内的代码使其输出正确结果

for(var i=0;i<5;++i){
  setTimeout(function(){
      console.log(i);
  },1000);
}
查到的资料是

 JavaScript是单线程执行的,无法同时执行多段代码。当某一段代码正在执行的时候,所有后续的任务都必须等待,形成一个队列。一旦当前任务执行完毕,再从队列中取出下一个任务,这也常被称为 “阻塞式执行”。所以一次鼠标点击,或是计时器到达时间点,或是Ajax请求完成触发了回调函数,这些事件处理程序或回调函数都不会立即运行,而是立即排队,一旦线程有空闲就执行。假如当前 JavaScript线程正在执行一段很耗时的代码,此时发生了一次鼠标点击,那么事件处理程序就被阻塞,用户也无法立即看到反馈,事件处理程序会被放入任务队列,直到前面的代码结束以后才会开始执行。如果代码中设定了一个 setTimeout,那么浏览器便会在合适的时间,将代码插入任务队列,如果这个时间设为 0,就代表立即插入队列,但不是立即执行,仍然要等待前面代码执行完毕。所以 setTimeout 并不能保证执行的时间,是否及时执行取决于 JavaScript 线程是拥挤还是空闲。

该题目考察的就是JavaScript的单线程以及setTimeout的异步特性。

【注】:JavaScript引擎是单线程运行的,浏览器运行期间只有一个线程在运行js程序。浏览器的内核是多线程的,他们在内核控制下相互配合,以保持同步,一个浏览器至少实现三个常驻线程:JavaScript引擎线程,GUI渲染线程,浏览器事件触发线程。

  • JavaScript引擎是基于事件驱动单线程执行的,js引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个js线程在运行js程序。
  • GUI渲染线程负责浏览器界面的渲染,当界面需要重绘的时候或者由于某种操作引发回流时,该线程就会执行,需要注意GUI渲染线程与js引擎是互斥的,当js引擎执行的时候GUI线程会被挂起,GUI更新会被保存在一个队列中,等到js引擎空闲时立即被执行
  • 事件触发线程,当一个事件被触发时该线程会把事件添加到待处理的队列末尾,等待js引擎的处理。这些事件可来自js引擎当前执行代码块,如setTimeout,也可来自浏览器内核的其他线程如鼠标点击、ajax异步请求等,但由于js的单线程关系所有这些事件都得排队等待js引擎处理。
  • 当线程中没有任何同步代码的前提下才会执行异步代码。

--以上信息来源于https://www.zhihu.com/people/fredshare。

所以正确的写法是

for(var i =0; i <10; i++){
 (function(e){
  setTimeout(function(){
   console.log(e); 
  },1000);
 })(i);
}



Cadence 17.4 PSpice仿真555定时器输出方波 这里利用555定时器组成多谐振荡器产生1Hz的方波并用PSpice仿真其输出的方波波形。555定时器是一种广泛应用的中规模集成电路。根据其内部组成的不同,可分为双极型(555B)和CMOS型(555C)两类。两种类型的定时器各有所长。双极型定时器具有较大的驱动能力,其输出电流可达200mA,可直接驱动发光二级管、扬声器、继电器等负载。而CMOS型定时器的输入阻抗高、功耗低。 阅读详情

相关推荐

[官方培训]19-物理模拟 Epic 肖月 笔记

物理引擎全局解算精度的设置,帧率越高,子步越多得到的模拟结果就越精确。引擎默认情况下是以变化的帧率运行的,但是对于Chaos物理引擎来说。一般子步越小,帧率越固定,效果就会更好更稳定一些。图示的分步选项就是依据下方的最长子步时长和最大步数对动态变化的帧率,进一步的做拆分来保证物理效果。对于影视项目建议都开启分步选项。红色框内有三个迭代次数的设置,这是Chaos基于位置的约束求解算法专用的一个设置,可以简单理解为迭代次数越高,当前帧一个子步内得到的结果就越精确。

Tcohneyn的博客 1545

for (var i = 0; i< 10; i++){ setTimeout(() => { console.log(i); }, 10) }

for(var i=0;i<10;i++){ setTimeout(function() { console.log(i) }, 10);} 答案:打印10次10 这道题涉及了异步、作用域、闭包 settimeout是异步执行,10ms后往任务队列里面添加一个任务,只有主线上的全部执行完,才会执行任务队列里的任务,当主线执行完成后,i是10,所以此时再去执行任务队列里的任务时,i全部是10了。对于打印4次是: 每一次for循环的时候,settimeout都执行一次,但是里面的函数没有被执行,而是被

hl_Abel的博客 4781

Qt+VS集成高德红外相机SDK与OpenCV的采图实践

本文详细介绍了在Qt和Visual Studio环境中集成高德红外相机SDK与OpenCV的完整实践方案。涵盖环境配置、SDK初始化、图像采集与处理、多线程优化等关键技术点,重点解决了高德红外相机数据转换、温度信息提取和Qt界面显示优化等核心问题,为红外图像处理应用开发提供可靠参考。

palm99的专栏 645

同步任务、异步任务、宏任务、微任务、任务的执行过程实例详解、setTimeout()是同步还是异步

JavaScript是单线程语言,也就是说,只有一条通道,且js中任务是按顺序依次执行的,但若有一个任务时间过长,就会让后续任务一直等待。为了解决这个问题,将任务分为同步任务和异步任务,异步任务又分为宏任务和微任务。

qq_56715703的博客 4694

数字蓝牙功放

数字蓝牙功放(TPA3110+BK8000L),基于D类数字功放芯片TPA3116蓝牙功放,HIFI级带滤波15Wx2蓝牙数字功放,支持有线和蓝牙两种音源输入

runweipa的博客 1418

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 514

setTimeout理解

如果在设定的时间内,发生新的keydown事件,则不触发Ajax通信,并且重新开始计时。所以上面的代码执行流程是:JS执行到setTimeout时,将其交给浏览器去计时(哪怕时间是0),然后去执行同步的for循环,因为例子中的for循环执行需要5s左右,在for循环执行3秒时,浏览器已经把之前的计时器计时完毕,然后推送到JS的事件队列里,当做下一个task任务执行,当前任务(for循环)不受影响,当for循环结束后,JS线程空了,然后去事件队列中取微任务或者新的任务(setTimeout),然后执行。

weixin_41989250的博客 6442

c语言压力变送器程序设计,基于单片机的压力变送器设计

基于单片机的压力变送器设计(任务书,开题报告,外文翻译,论文15000字,代码)摘要随着工业化水平的不断提高,新型智能仪表在工业生产过程中运用也越来越广泛,同时对输出数据的准确检测和处理也变得至关重要。生产过程的运行和设备安全是极其重要的,那么如何实现对其精确的检测呢?众所周知,在工业生产过程中有一个很重要参数——压力,显然这个参数是一个必不可少的条件。故而,研究智能压力变松器系统对工业生产有着不...

weixin_33681561的博客 1962

前端每日一解 - setTimeout的执行顺序

关于setTimeout执行顺序的心得。

Jackie_Snow的博客 3817

Python爬虫应对Cloudflare防护:5秒盾+Turnstile验证码实战(AST反混淆+指纹模拟,成功率95%)

Cloudflare 5秒盾+Turnstile验证码的防护核心,是通过“前端JS挑战+多维度指纹校验”确认请求来源的真实性。用AST反混淆还原CF的验证逻辑,避免执行无用代码导致的验证失败;基于真实浏览器采集指纹,确保指纹维度100%匹配真人环境;结合轻量级JS引擎和自动化工具,模拟完整的浏览器执行环境。该方案的绕过成功率可达95%(剩余5%主要是IP或请求频率导致的风控),适用于绝大多数部署CF防护的网站。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1713

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

weixin_42412049的博客 2296

从 setTimeout 到浏览器和 JS 引擎的运行机制

在学习setTimeout的过程中深入学习浏览器和js引擎的运行机制

羽墨灵丘的博客 711

100天精通Python(爬虫篇)——第118天:selenium自动化操作浏览器基础大总结

一、Selenium框架环境搭建 1. 下载模块 2. 安装浏览器驱动WebDriver 二、基础操作 1. 打开浏览器 2. 无界面模式 3. 元素定位 4. 元素操作 5. 前进后退 6. 执行js 7.页面等待 隐式等待(常用) 显式等待(了解) 三、进阶操作 1. 使用代理ip 2. 修改请求头 3. 隐藏指纹特征.....................

努力让自己发光,对的人才能迎着光而来 10万+

setTimeout的“异步”,执行顺序

都说故事是有起因的,果然不假。因为今天公司的一道年终考试题 ……… 对的没错,公司的年终考试,前后端都有直接上题目,以下代码的输出顺序…..(function () { console.log(1); setTimeout(function () { console.log(2); }, 100); console.

可遇,好孩子 4508

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JS异步执行之setTimeout 0的妙用

  最近在工作中遇到一些问题,大致是关于js执行问题的。由于没搞清执行顺序,导致出现了一些奇怪的bug。 所以这里整理一些有关异步执行的知识(冰山一角角)...   大家都知道js是单线程的,执行起来是顺序的,在顺序的业务逻辑中当然没有问题。如果遇到可以并发执行的业务逻辑,再排队就很低级了,所以需要异步执行! 1、什么是异步? setTimeout(function(){...

217

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

等待异步执行完 再执行js语句_JavaScript异步操作:setTimeout,Promise,async/await的区别?...

1. setTimeout直接来个例子:setTimeout异步任务属于宏任务。2. PromisePromise本身是同步的立即执行函数, 当在executor中执行resolve或者reject的时候, 此时是异步操作, 会先执行then/catch等,当主栈完成后,才会去调用resolve/reject中存放的方法执行,打印p的时候,是打印的返回结果,一个Promise实例。打印:当JS主线...

weixin_39917894的博客 1708

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Promise、async、setTimeout异步执行顺序问题

题目一: console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); const newPromise6 = new Promise(function(resolve, reject) { resolve(console.log('promise1')); }); newPromise6.then(function() { console.log('promise2')

weixin_43933259的博客 1487

setTimeout异步执行解析

不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为JavaScript是一门单线程语言,所以我们可以得出结论: JavaScript是按照语句出现的顺序执行的 所以我们以为JS都是这样的: let a = '1'; console.log(a); let b = '2'; console...

城南花已开丷的博客 3820

promise异步与setTimeout等执行顺序

let promise = new Promise(function(resolve, reject) { console.log('Promise'); resolve(); }); setTimeout( ()=&gt;{ console.log(1) },0) setTimeout( ()=&gt;{ console.log(2) },0) let promis...

山海一哥的博客 2492

前端随笔(四)————异步执行.Promise与setTimeout的执行顺序

Promise与setTimeout的执行顺序

Dfox7_s的博客 2032

同为异步的promise和setTimeout的执行顺序

promise和setTimeout都是异步执行的,但是执行顺序谁先谁后呢?先看两段简单的代码,比较一下同步和异步: //promise和同步比较 new Promise(function (resolve, reject) { resolve(1); }).then(console.log); console.log(2); // 2 // 1 //定时器和同步比较 setTimeou...

jsyxiaoba的博客 5420

JS异步--async,await,promise,setTimeout 执行顺序

.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rgba(51, 51, 51, 1) } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .ma...

优快云_KONGlX的博客 675

使用setTimeout函数实现setInterval函数的效果,利用Promise来控制异步代码的执行顺序

如题,今天回顾了《JS高级程序设计》书中关于setTimeout函数和setInterval函数的描述,书中介绍到: 可见,在使用超时调用时,没有必要跟踪超时调用 ID,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。一般认为,使用超时调用来模拟间歇调用的是一种最佳模式。在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。 而像...

似水流年的博客 1万+

setTimeout 执行顺序案例理解,异步操作

测试代码 : console.log("111111111111"); console.log("22222222222"); setTimeout(function () { console.log("333333333"); }, 100); setTimeout(function () { console.log("444444444"); }, 0); console.log("55555555"); 输出顺序如下: 111111111111 22222222222 55

zcc的博客 1297

同步、异步、回调执行顺序之经典闭包setTimeout分析

同步、异步、回调执行顺序之经典闭包setTimeout分析

丁哒哒的博客 325

关于异步 宏任务微任务的理解,以及promise async settimeout执行顺序的问题

在面试的过程中难免会碰到让你说出异步执行顺序的问题,一起来看一下吧。内容持续更新中~ 文章目录异步和同步的概念js有哪些异步定时器事件绑定发布/订阅模式(观察者模式)回调函数ajaxpromisepromise是什么promise能做什么promise三个状态Promise的优缺点promise 链式调用async await异步实现原理(事件循环)宏任务和微任务执行顺序总结:案例 异步和同步的概念 javascript语言是一门“单线程”的语言,可以改变程序正常执行顺序的操作就可以看成是异步操作。 总结:

qq_44828153的博客 366
上一篇: git本地仓库 删除文件
下一篇: JavaScript判断数据类型
david___
博客等级 码龄15年 13粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值