必包问题
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
楼上的正解……
|