for循环console输出结果的问题

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

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。

时间: 2024-10-05 17:26:31

for循环console输出结果的问题的相关文章

【C语言】用循环语句输出菱形

//用循环语句输出菱形 #include <stdio.h> int main() { int i,j; for(i=0;i<=3;i++) //上4行 { for(j=0;j<=3;j++) //上4行的左边 { if(i+j<=2) printf(" "); else printf("*"); } for(j=4;j<=6;j++) //上4行的右边 { if(j-i>=4) printf(" ");

C# Console 输出

C# Console 输出 C#控制台输出有两种方法:Write()和WriteLine(),它们都是命名空间System中Console类的方法,能够直接输出C#提供的所有基本数据类型.区别是后者输出后换行. 1.基本输出 基本数据类型的简单输出形式为: Console.Write("格式串{参数序号}",参数表); {0}和{1}分别代表后面的参数,0为第一个参数,1为第二个,以此类推. Console.Write(对象); 2.格式化输出 其形式为: Console.Write(

解决Jenkins console输出乱码

背景 Jenkins console输出乱码,如 ????????????? 1 解决办法 Jenkins Master 设置utf8 encoding Tomcat 启动脚本 export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8" Jenkins 系统管理 环境变量 Key: LANG, Value zh_CN.UTF-8 Jenkins Slave 启动脚本 nohup java "-Dfile.encoding=UTF-8 -j

while循环同样适用@python for循环内输出和外输出

# 原文: 通过for循环求和,结果发现输出完全不一样,一个循环是输出每一步的结果,另一个循环是输出最终一次的结果,今天终于弄懂了.如下所示: 原文链接:https://blog.csdn.net/elanewow/article/details/81286617 原文地址:https://www.cnblogs.com/qnmtt/p/9568970.html

console 输出信息美化

不久前在一些前端的网站上看到的效果,以前觉得console只是拿来做做调试,不过现在看到别人网站的console美化效果,这个还可以作为一种网站个性来显示的.. 以%c开头,后面的文字就打印的信息,后面一个参数就是样式属性:可以尝试多个样式,每碰到一个%c开头就会应用对应的样式: console.log("%c 第一个信息 %c 第二个信息 %c 第三个信息", "color:red","","color:orange;font-wei

为什么循环不能输出??

#include<iostream>#include<vector>using namespace std;struct num{ int number; int times;}; int main(){ int m; cin>>m; vector<int>a; vector<num>b; while(m--) { int n; cin>>n; while(n--) { int x; cin>>x; a.push_back

图解C# Console 输出和Console相关编程复习总结

1 基本控制台输出 首先进入 SharpDevelop ,新建一个控制台工程: SharpDevelop简介: http://blog.csdn.net/bcbobo21cn/article/details/44200205 using System; namespace conwrdemo { class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); // T

[c/c++奇技淫巧]不用循环判断输出5到1

偶尔看到的一道题,和哥们几个讨论了一下,这玩意,不是循环就是递归了么,当然,只要达到目的,管他什么循环递归,对吧.现在总结一下我们能想到的所有的方法,大家有新的想法欢迎跟帖讨论~~ ok,开工. 第一条,最简单的,直接输出.(因为输出结果都差不多,就不一个一个截图了) printf("5 4 3 2 1\n"); 第二条,简单的循环.  // for 循环  for(int =5; i !=0; i--) {      printf("%d\n",i);  }  

数组定义属性遍历循环,输出最大数

public class shuzu { public static void main(String[] args) { //数组 //类型+[] // int[]s; // // Spring[]str; // // //使用之前初始化大小 // int[]a=new int[5];//数组初始化,数组长度为5 // // //数组的索引:从0开始.0,1,2,3,4.最大值是数组长度-1. // //给每一个空间赋值: // a[0]=0; // a[1]=1; // a[2]=2; //