我想定时打印出一串数字,写好了如下代码

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

打印出来的结果是5个5。为什么不是0,1,2,3,4呢?主要是因为setTineout的i是对外层i的引用,并非i的值,运行5次的结果都指向最终的i值(5)。可以通过将i值保存在局部变量来解决:

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

这样就可以打印出0,1,2,3,4。

最新文章

  1. JDBC 内部资料 请勿转载 谢谢合作
  2. Events with Dojo(翻译)
  3. 【POJ-2482】Stars in your window 线段树 + 扫描线
  4. java微信接口之四—上传素材
  5. MongoDB 存储引擎Wiredtiger原理剖析
  6. TexBox的属性
  7. SecureCRT最佳配色方法+直接修改默认配置方法 - imsoft.cnblogs
  8. ios开发--清理缓存
  9. 一段画对角线的canvas代码,之前没有写过canvas代码,现在记录下来
  10. Oracle 修改密码 解锁
  11. SQL存储过程动态查询数据区间
  12. java异常处理机制(try-catch-finally)
  13. 实训任务01:安装Hadoop
  14. Eclipse配置注释模板详细介绍
  15. 递归打印lua中的table
  16. 【Tars】腾讯微服务框架Tars介绍
  17. 分享chrome清空缓存开发小技巧
  18. 柯朗微积分与数学分析习题选解(1.1 节 e)
  19. SpringMVC 多视图解析器配置以及问题
  20. [OSG]OSG的相关扩展

热门文章

  1. p1036 选数(不详细勿看,递归)
  2. java中list或数组中随机子集工具类
  3. c++_核桃的数量
  4. [MVC]在练习MusicStore过程中问题实录
  5. java环境配置——配置tomcat用户
  6. BNUOJ 2345 Muddy Fields
  7. [luoguP2736] “破锣摇滚”乐队 Raucous Rockers(DP)
  8. 斗地主(codevs 4610)
  9. Codevs 1497 取余运算== 洛谷P 1226
  10. vim—基本命令1