function test(){
var arr = [];
for(var i = 0; i < 10; i++){//当i = 10的时候循环停止
arr[i] = function(){ //arr的每一位都是一个函数
console.log(i);//虽然函数已经定义,但未执行
}
}
return arr;
}
var myArr = test();
for(var i = 0; i < myArr.length; i++ ){
myArr[i]();
}
这样会输出10个10!!!!
最后函数执行的时候会调用test的AO中的i
AO{
i = 10;
}
即会输出10个10
解决方案:立即执行函数
function test() {
var arr = [];
for(var i = 0; i < 10; i++) {
(function(j) {
arr[j] = function() {
console.log(j);
}
}(i))
}
return arr;
}
var myArr = test();
for(var i = 0; i < myArr.length; i++) {
myArr[i]();
}