奇怪的js,用 let 加持修正结果

代码片段
0 822
xukai
凯特云(xukai) 5 2021/4/29 14:11:06
编辑此贴 收藏

描述:-


for (var i = 0; i < 10; i++) {
            setTimeout(function () {
                console.log(i);
            }, 0)
        }
你知道上面会输出上面结果吗???
会是0到9都打印一遍吗?错,上面会输出10个10,因为执行到setTimeout的时候,外循环已经执行完,并且在循环最大值的时候还执行了个+1操作,所以会输出10个10,而不是10个9。
问题:那么如何能让上面的结果输出我们想要的0-9呢?
解决方案:只需要将变量定义方式var修改为let即可,如下:
for (let i = 0; i < 10; i++) {
            setTimeout(function () {
                console.log(i);
            }, 0)
        }
以上输出结果为:0,1,2,3,4,5,6,7,8,9




个人签名:己所不欲勿施于人

回帖
  • 消灭零回复
本周热议
html+css+jquery 实现超帅留言墙效果!超帅,不喜勿喷!附完整demo 71
c# winform 身份证信息读取 14
和客服之间的神沟通 4
c#如何集成控制Led屏,实现数据发送自动开机、关机等操作! 3
关于站点启用HTTPS访问的通知 1
非法访问资源ip地址公布 1
不用写一句sql的ORM框架,支持多种数据库 1
c#如何获取电脑mac地址,超简单! 0
批量检测指定ip某些端口是否开启,用来做什么自己想吧!!! 0
c# 实现文件下载功能,带下载进度条,可用到软件的自动更新中 0
热门资讯
【每日一习话】把事业放在心上 把责任扛在肩上 663 
联播+ | 谋定而动 习近平引领京津冀携手下好“一盘棋” 540 
强力堆料,几乎没有短板、铭瑄iCraft B550M电竞之心主板评测 488 
第一观察 | 从两会“如期”召开看百年大党的执政能力 485 
看图猜成语:明明很简单,是不是大意了 483 
玖月奇迹王小玮近照曝光!穿紧身裤秀出小鸟腿,皮肤白到发光 478 
美媒承认搞错了,但已经来不及了 470 
《奇葩说》第七季总决赛,肖骁用不是自己风格的夺冠后,获得表扬 464 
广东一男子离职索赔270万,公司:你月薪才25万 459 
成人体验馆被封,客人一天点3个娃娃:男人的孤独,谁能懂? 451 
王霜首次回应结束留洋原因:不因贾秀全 只因这3个字 450 
被开除,程序员将公司告上法庭,公司怒怼:代码你写的,你担责 446 
美日共同发表"对中国措辞最强硬"声明 外交部撂重话 440 
扒女明星每日穿搭,千元Coach这样搭,千元CHANEL这样买! 438 
“波塞冬”无法拦截?俄军事专家:只能在发射前攻击它的母艇 418