javascript - 一道JS题目

查看:73
本文介绍了javascript - 一道JS题目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

闭包,闭包,闭包的问题!

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

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

for (var i=1;i<=5;i++) {
    (function(){
        var j = i;
        setTimeout(function(){console.log(j)},
                    j*1000);
    })();    
} 
\\ 或 ES6
for (let i=1;i<=5;i++) {
    setTimeout(()=>console.log(i),i*1000);
}

这篇关于javascript - 一道JS题目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆