必包问题

selfcontroller 2013-11-17
      function f(){
        var a = [];
        var i;
        for(i = 0; i < 3; i++) {
          console.log(i)
          a[i] = function() {
            return i;
          }
        }
        return a;
      }

      var b = f();
      console.log("----------")
      console.log(b[0]())


请看以上代码,打印出的结果是:
0
1
2
----------
3

这个3是怎么来的,求解释
selfcontroller 2013-11-17
答案已经知晓,是对for循环理解的不够深入造成的,在最后 一轮循环的时候,i已经变成了3,正是因为此次的i变成了3,所以才导致了循环的终止。
hanmiao 2013-11-18
标题里貌似是闭包而不是必包吧,写了错别字,改改吧。
lovezzh1 2013-11-18
JS是提前申明的。 a[i]=function() { return i;} 中绑定的i值是一个固定的i值,并不是每次for循环都会生成一个新的i。当b返回后,i的值为3。
selfcontroller 2013-11-20
@hanmiao ,谢谢提醒,谢谢 @lovezzh1 的指点
ma963214 2013-11-27
a[i] = (function(n){return function(){return n;}})(i);

是要这样的吗?
悠-悠-虫 2013-11-27
楼上的正解……
Global site tag (gtag.js) - Google Analytics