为了账号安全,请及时绑定邮箱和手机立即绑定

循环内的函数问题

循环内的函数问题

一只萌萌小番薯 2018-09-03 13:31:08
var a = [];for (var i = 0; i < 10; i++) {   a[i] = function () {    console.log(i);   }; } a[6](); // 10a[6] //function(){    console.log(i);  }我不理解的是,这里为什么不是a[6] = function () {        console.log(6);       };
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

因为 i 的作用域 是 window,每循环一次,都会重新赋值。

给你改写一个了一个demo,用外套function锁定作用域,可以实现你要的效果

var a = [];for (var i = 0; i < 10; i++) {
  a[i] = (function (i) {    return function(){        console.log(i);
    }
  })(i);
}

运行结果:

> a[6];function(){    console.log(i);}

>a[6]();
6


查看完整回答
反对 回复 2018-10-20
  • 1 回答
  • 0 关注
  • 551 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信