循环内的函数问题

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);
      };


一只萌萌小番薯
浏览 552回答 1
1回答

Smart猫小萌

因为 i 的作用域 是 window,每循环一次,都会重新赋值。给你改写一个了一个demo,用外套function锁定作用域,可以实现你要的效果var&nbsp;a&nbsp;=&nbsp;[];for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;a[i]&nbsp;=&nbsp;(function&nbsp;(i)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(i); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;})(i); }运行结果:>&nbsp;a[6];function(){&nbsp;&nbsp;&nbsp;&nbsp;console.log(i);} >a[6](); 6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript