当js中的for循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)
当你在for循环里写if判断,再加延时器或者定时器时,一定要保存当前的i的值,再做处理,否则你拿到的i的值会是for循环里最大的那个;
看demo
for (var i = 0; i < 10; i++) {if(i == 5){setTimeout(aa,2000);function aa(){console.log( "i="+i);}}}
你们觉得会打印出i的值是几?
最终结果会是10!
延时器换做定时器, 最终结果也是一样的;
那么为什么呢?
js读取代码是从上向下读取的,当它读取到i满足if语句的时候并不是停止了,还会继续做循环判断;而此时if语句里面是一个延时器,当延时器的延时时间结束要调用aa函数的时候,for循环已经循环结束,而此时的i已经变为10;
所以打印出来i的值就会是10;
那么怎么解决这个问题呢?看代码
var j = null;for (var i = 0; i < 10; i++) {if(i == 5){j = i;setTimeout(aa,2000);function aa(){console.log( "i="+j);}}}
这样打印出来的就是我们想要的结果了,没错就是5;
原理就是当满足if语句时,我们用一个变量把当前i的值保存下来;
当js中的for循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)相关推荐
- JS中双层for循环执行顺序
js中双层for循环的执行顺序 1 首先会先执行第一层循环,执行顺序如图所示.1:执行变量**(仅执行一次)**2:执行条件 3:执行代码块区域(注意,代码块中包含第二层循环) 4最后执行++. 2 ...
- 前端:JS/24/BOM和DOM简介,for...in循环遍历,window对象的属性和方法,延时器,定时器,screen屏幕对象,location地址栏对象,history历史记录对象
BOM 和DOM简介 BOM ,Browser Object Model ,浏览器对象模型: BOM主要提供了访问和操作浏览器各组件的方式: 浏览器组件:window(浏览器容器), location ...
- js中如何得到循环中的点击的这个id_Js篇面试题9请说一下Js中的事件循环机制
虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...
- js中的事件循环和宏任务和微任务的理解
参考许多大神的文章,写下自己的理解 事件循环: 说到事件循环就得谈到js中同步和异步的执行顺序 1.javascript将任务分为同步任务和异步任务,同步任务放到主线中,异步函数首先进行回调函数注册. ...
- 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
[摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...
- 5.node.js中的事件循环
先举一个简单的例子 const bar = () => console.log('bar')const baz = () => console.log('baz')const foo = ...
- Js篇-面试题9-请说一下Js中的事件循环机制
虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...
- js中的for循环如何跳出,js中for循环的两种语法
js几种for循环的几种用法 谷歌人工智能写作项目:小发猫 js,for循环是怎么运行的? typescript有哪些变化. 最普遍的介绍:for循环是JavaScript中最常用的循环,标准for循 ...
- flutter Timer 延时器,定时器详解
[flutter工具箱] Timer 概览 重要属性 主要用法 引用 延时 定时循环 取消定时器 官方api地址 概览 Timer是flutter自带的官方延时器工具,本篇研究一下Timer的用法. ...
- 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...
最新文章
- scipy.linalg.norm 线性代数运算 API
- C++中的变量不初始化是什么结果?(整型、bool型、字符型)结果都是随机的,不确定
- 参考地、保护地、大地的概念
- BU_DATE_CHAR abap screen 日期字段搜索帮助
- php实现标签云,php标签云的实现代码
- linux内存初始化初期内存分配器——memblock
- 光耦驱动单向可控硅_光耦继电器在实际应用中的作用以及工作原理!!
- java 模块化基础
- 英语每日阅读---3、VOA慢速英语(翻译+字幕+讲解):哈佛大学被控歧视亚裔学生
- 【OpenGL】glFinish()和glFlush()函数详解
- XML生成与解析(DOM、ElementTree)
- jrtplib的使用
- 谷歌代码规范的中文版
- ubuntu16.04安装rabbitVCS
- word计算机公式怎么算,word怎么实现自动计算公式
- 使用Python实现excel项目清单自动生成word文档
- 在html css中加粗显示,css字体怎么加粗?
- 推荐几个新手可以在网上赚钱的几个项目
- 苏阳乐队杭州巡演后记
- Generalized Focal Loss