优艾设计网

一道JS题目?

优艾设计网 https://www.uibq.com 2023-06-10 07:58 出处:网络 作者:PS基础教程
for (var i=1;i<=5;i++) { setTimeout(function(){ 优艾设计网_设计模板console.log(i) },i*1000) } for循环语句是如何运行的呢?为什么会输出5个6呢?心肝寅宝宝

for (var i=1;i<=5;i++) { setTimeout(function(){ 优艾设计网_设计模板console.log(i) },i*1000) } for循环语句是如何运行的呢?为什么会输出5个6呢?


心肝寅宝宝 2小时前优艾设计网_设计模板

}


红色娘子精 2小时前

优艾设计网_PS交流

一开始, 程序从for开始执行, 遇到setTimeout的时候先不管, 继续往后执行, 一直执行到循环结束.好了, setTimeout可以执行啦. 连续六个setTimeout打印出i, 而此时的i已经是6啦.


qkoufu优艾设计网_设计LOGO4813 1小时前

判断当前i的值是否小于等于5,是的话就加1,因为你用了setTimeout,所以一秒后i的值已经变成6了,再输出的话,就一直是6了


linawang08 优艾设计网_设计百科 1小时前

输出的结果是:2.就是说{}中定义的变量i会取代{}外面的变量i,即没有块级作用域.


maksimsong 优艾设计网_设计模板 1小时前

通过上面的代码,可以看出只定义了一个变量 i ,只有在循环里面赋值为1~5,循环结束后是 6。而setTimeout中的代码是在循环之后执行的,所以输出的i是 6。而不是你所想的。因为 i 只有一个,不可能同时等于 1,2,3,4,5.


梦想趁早 优艾设计网_Photoshop百科 1小时前

可以改成(建议先理解上面一段代码,先不要纠结ES6的):


0

精彩评论

暂无评论...
验证码 换一张
取 消