for循环setTimeout闭包

for循环setTimeout闭包

for循环setTimeout闭包

for (var i = 0; i < 2; i++) { //个人理解:settimeout(stout)需要前面执行完才执行
            setTimeout(() => {    //第一轮 i=0 进入stout,但不执行stout,到for里面i++,这里i属于全局了全局的i此时等于1
                console.log(i); //第二轮 i=1 进入stout,但不执行stout,到for里面i++,这里i属于全局了全局的i此时等于2
            }, 1000);            //第三轮 i=2 在for里面判断退出for循环 此时全局i=2,这时候开始执行2个settimeout console出来的是全局i,统一是三
        }
        //输出: 2 2
for (let i = 0; i < 2; i++) { //个人理解:settimeout(stout)需要前面执行完才执行
            setTimeout(() => {    //第一轮 i=0 进入stout,但不执行stout,stout里的i等于0,let块作用域的原因不穿回for里面,i++使用for里面的i 这时for里面的i=1
                console.log(i); //第二轮 i=1 进入stout,但不执行stout,stout里的i等于1,let块作用域的原因不穿回for里面,i++使用for里面的i 这时for里面的i=2
            }, 1000);            //第三轮 i=2 退出循环 此时第一个stout的i=0,第二个stout的i=1,for循环已经退出,开始执行settimeout 输出0 1
        }
//输出结果: 0 1
{
            let a = 2;            //个人理解:settimeout(stout)需要前面执行完才执行
            {                       //第一轮 m=0 进入stout,但不执行stout,stout里的m等于m=0+100,此时m=100,let块作用域的原因不穿回for里面,m++使用for里面的m(0++) 这时for里面的m=1
                                    //第一轮 m=0 进入stout,但不执行stout,stout里的m等于m=1+100,此时m=101,let块作用域的原因不穿回for里面,m++使用for里面的m(1++) 这时for里面的m=2
                for (let m = 0; m < 2; m++)//第三轮 m=2 退出循环 此时第一个stout的m=100,第二个stout的m=101,for循环已经退出,开始执行settimeout 输出100 101
                {
                    setTimeout(() => {
                        m += 100;
                        console.log(m);
                    }, 500)
                }
            }
            a++;
            console.log(a);
            a++;
            console.log(a);
            a++;
            console.log(a);
        }
        //输出结果:3 4 5 100 101

前面懂了,这里也是一样的

 {
            var a = 2;
            {
                for (var m = 0; m < 2; m++) {
                    setTimeout(() => {
                        m += 100;
                        console.log(m);
                    }, 500)
                }
            }
            a++;
            console.log(a);
            a++;
            console.log(a);
            a++;
            console.log(a);
        }
        //输出结果:3 4 5 102 202
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值