话题 首页 > JavaScript 教程 > JavaScript 教程话题列表 > 详情

循环内的函数问题

精华
q462173711 2016-10-20 02:45:37 浏览(2148) 回复(5) 赞(0)
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
a[6] //
function(){
    console.log(i); 
}

我不理解的是,这里为什么不是

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


javascript

回答(5)

babyfiyme 2016-10-20

因为 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-05-31

好慢呀,空空如也,半天不来大神解决,大佬在哪啦

1144100656 2018-05-31

刚学习程序,过来学习学习!!!!...

1152696398 2018-05-31

快来解决啦!快来!快来! 快来 快来

要回复,请先登录 或者注册