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

打印结果:三个3

原因分析:setTimeout()是一个异步处理函数,它会等待所有的主线程任务处理完,才开始执行自己的内部的任务,每隔1s往任务队列中添加一个任务【闭包函数,setTimeout()中的函数,现在还没执行】,当主线程执行完时,这时i=3,

才开始执行任务队列中的任务【闭包函数,setTimeout()中的函数开始执行,执行三次】。

for循环括号内的就是主线程,执行完时i是3,所以会打印出3次3;

如果想打印出0,1,2

解决方案:

  1. 把var改为let,let是块极作用域,每次for循环都会把对应的i绑定到添加的任务【闭包函数,setTimeout()中的函数】中,所以当主线程执行完时,也不会影响到每个任务中i。所以可以打印出0   1   2
  2. 把定时器放在一个自执行函数中用i当做参数
    (function(i){setTimeout(function(){console.log(i);},1000)
    })(i)

转载于:https://www.cnblogs.com/funny-code123/p/9765856.html

for循环中的setTimeout()相关推荐

  1. [译]JS闭包:For循环中的setTimeout

    译者:嘴里起了个泡 原文地址: wsvincent.com/javascript-- 这篇文章详细介绍了JS在执行for循环里面的 setTimeout() 语句的时候发什么了什么.这是面试中经常会被 ...

  2. for循环中var和let的区别

    今天在做题的时候,遇到了一个不太懂的问题,经过查阅资料,终于搞明白了这个问题,发出来当做个笔记. 首先是var: for (var i = 0; i < 5; i++) { setTimeout ...

  3. R语言循环中break函数和next函数使用实战

    R语言循环中break函数和next函数使用实战 目录 R语言循环中break函数和next函数使用实战 #基础for循环 #带break的for循环

  4. Vue指令之v-for——迭代数组、迭代对象中的属性、迭代数字||v-for循环中key属性的使用

    v-for循环普通数组 v-for循环对象数组 v-for循环对象 v-for迭代数字 v-for循环中key属性的使用 <!DOCTYPE html> <html lang=&qu ...

  5. html页面如何循环遍历,遍历foreach循环中的HTML DOM元素

    5 个答案: 答案 0 :(得分:3) 您可以使用closest('tr')查找最近的父tr元素,然后使用index()获取行号.试试这个: $('td').click(function() { va ...

  6. matlab for 取数组,for循环中的MATLAB和单元格数组处理

    for循环中的MATLAB和单元格数组处理 我是MATLAB新手,想从数据库中提取一个单元格数组中的数据: sensors = [ 1] [23] [1] [ 0] [0.1000] [1x29 ch ...

  7. [vue] v-for循环中key有什么作用?

    [vue] v-for循环中key有什么作用? 四个字: 性能优化,简述: 让vue在更新数据的时候可以更有针对性的 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢 ...

  8. python循环中的else_python 循环中else的简单示例

    导读热词对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 众多语言中都有if else这对条件选择组合,但是在python中还有更多else使用的地 ...

  9. java sleep 循环_while循环中的Thread.sleep()

    我注意到NetBeans警告我在我的Java代码中使用while循环中的Thread.sleep(),所以我已经对这个主题进行了一些研究 . 主要问题似乎是性能问题,当计数器仍处于休眠状态时,你的状态 ...

  10. oracle双重for循环sql,Oracle 11g中for循环中的PL / SQL限制

    我有一个大约有3000万条记录的表,并且我想像这样循环遍历表中存在的记录: FOR i IN (SELECT * FROM tbl_items it Left join location lo ON ...

最新文章

  1. 百度DisConf分布式配置框架源码试读(一)HttpClient 长连接
  2. Python操作Excel(将父子级表头生成树状结构)
  3. 建模的常用手段:组合与聚合
  4. html向左箭头样式,详解Bootstrap的纯CSS3箭头按钮样式
  5. HashMap集合和TreeMap集合
  6. Autocad下载 安装 和谐 与 卸载
  7. swift for循环_Swift | 实战一个简单的素数计算器demo
  8. linux 忽略大小写的查找
  9. 浅入浅出 Android 安全:第二章 Android Linux 内核层安全
  10. div显示在上层_将某个div层显示在最上面(总结)
  11. 在C#中列出进程,杀掉进程。
  12. STM32+AD7705实现电压采集
  13. 【个人经验】3个步骤教你拿到软件著作权证书
  14. MSM8953修改开机动画
  15. 8queen(稍后补)
  16. ex is not shell_linux下环境变量详解
  17. win10换win7系统步骤操作详解分享
  18. Java工程师是做什么的?学习java能干什么?
  19. Python还是很迷茫的小伙伴进来,教你用图秒懂Python
  20. 网络对抗技术_实验四_恶意代码技术

热门文章

  1. WORD中如何进行双行合一
  2. LINUX SHELL为awt指定分隔符
  3. 解决办法:look up error: undefined symbol
  4. 由电梯紧急按钮,谈用户体验
  5. 安卓6.0的闹钟问题及解决
  6. linux没有启用的仓库_在RHEL/CentOS 4-6中安装并启用RPMForge仓库
  7. C# TextBox光标位置设置 滚动到最后一行 显示最后一行 自动跳转最后一行
  8. 交互式电子杂志_电子杂志形式与交互问题分析
  9. python opencv中的imwrite函数_python – OpenCV imwrite函数导致’undefined symbol’
  10. freetds mysql_关于 freetds pymssql 的安装部署