function count() {
var arr = [];
for (var i=1; i<=3; i++) {
arr.push(function () {
console.log(i)
return i * i;
});
}
return arr;
}
var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];
console.log(f1(),f2(),f3()) //4 4 4 16
最近在看廖雪峰的 js 教程,看到这里有点疑惑,为什么到最后面 i=4
呢?循环语句中条件写出了 i<=3
的啊。希望有大神给我点指点。
for循环是判断后置的。你可以简单理解为:
第一次:i=1,i<=3,条件成立,循环继续;
第二次:i=1+1=2,i<=3,条件成立,循环继续;
第三次:i=2+1=3,i<=3,条件成立,循环继续;
第四次:i=3+1=4,i>3,条件不成立,循环结束。变量i=4被保存下来,i的值不再改变,不再执行循环体里面的内容。
为什么函数在
for
循环体里面,拿到的i
却始终是4呢,那是因为这个函数根本没有执行,只是声明了一个匿名函数,所以不会把i
当时的值保存下来,只是保持对i
内存位置的引用。要想保存i
循环s的值,可以使用闭包。