当你在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循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)相关推荐

  1. JS中双层for循环执行顺序

    js中双层for循环的执行顺序 1 首先会先执行第一层循环,执行顺序如图所示.1:执行变量**(仅执行一次)**2:执行条件 3:执行代码块区域(注意,代码块中包含第二层循环) 4最后执行++. 2 ...

  2. 前端:JS/24/BOM和DOM简介,for...in循环遍历,window对象的属性和方法,延时器,定时器,screen屏幕对象,location地址栏对象,history历史记录对象

    BOM 和DOM简介 BOM ,Browser Object Model ,浏览器对象模型: BOM主要提供了访问和操作浏览器各组件的方式: 浏览器组件:window(浏览器容器), location ...

  3. js中如何得到循环中的点击的这个id_Js篇面试题9请说一下Js中的事件循环机制

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...

  4. js中的事件循环和宏任务和微任务的理解

    参考许多大神的文章,写下自己的理解 事件循环: 说到事件循环就得谈到js中同步和异步的执行顺序 1.javascript将任务分为同步任务和异步任务,同步任务放到主线中,异步函数首先进行回调函数注册. ...

  5. 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  6. 5.node.js中的事件循环

    先举一个简单的例子 const bar = () => console.log('bar')const baz = () => console.log('baz')const foo = ...

  7. Js篇-面试题9-请说一下Js中的事件循环机制

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...

  8. js中的for循环如何跳出,js中for循环的两种语法

    js几种for循环的几种用法 谷歌人工智能写作项目:小发猫 js,for循环是怎么运行的? typescript有哪些变化. 最普遍的介绍:for循环是JavaScript中最常用的循环,标准for循 ...

  9. flutter Timer 延时器,定时器详解

    [flutter工具箱] Timer 概览 重要属性 主要用法 引用 延时 定时循环 取消定时器 官方api地址 概览 Timer是flutter自带的官方延时器工具,本篇研究一下Timer的用法. ...

  10. 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务

    队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...

最新文章

  1. scipy.linalg.norm 线性代数运算 API
  2. C++中的变量不初始化是什么结果?(整型、bool型、字符型)结果都是随机的,不确定
  3. 参考地、保护地、大地的概念
  4. BU_DATE_CHAR abap screen 日期字段搜索帮助
  5. php实现标签云,php标签云的实现代码
  6. linux内存初始化初期内存分配器——memblock
  7. 光耦驱动单向可控硅_光耦继电器在实际应用中的作用以及工作原理!!
  8. java 模块化基础
  9. 英语每日阅读---3、VOA慢速英语(翻译+字幕+讲解):哈佛大学被控歧视亚裔学生
  10. 【OpenGL】glFinish()和glFlush()函数详解
  11. XML生成与解析(DOM、ElementTree)
  12. jrtplib的使用
  13. 谷歌代码规范的中文版
  14. ubuntu16.04安装rabbitVCS
  15. word计算机公式怎么算,word怎么实现自动计算公式
  16. 使用Python实现excel项目清单自动生成word文档
  17. 在html css中加粗显示,css字体怎么加粗?
  18. 推荐几个新手可以在网上赚钱的几个项目
  19. 苏阳乐队杭州巡演后记
  20. Generalized Focal Loss

热门文章

  1. 2016/7/7 设置wamp2.5 mysql密码 重点是mysql版本
  2. #大数加减乘除#校赛D题solve
  3. Apache-一个IP多个主机域名
  4. [Effective C++系列]-为多态基类声明Virtual析构函数
  5. 进程,线程,协程的区别与联系
  6. 002.FTP配置项详解
  7. Linux用户和组账户管理
  8. dbflow 批量 增删查改
  9. word域高级应用 if 域 域邮件合并的值的更改 日期的更改
  10. 谷歌波浪推行受阻 “医疗云”生不逢时