在循环中使用匿名函数时,匿名函数的返回值都是5,导致结果为arr=[5,5,5,5,5]
function box(){
var arr = [];
for(var i=0;i<5;i++){
arr[i] = function(){
return i
};
};
return arr;
};
var b = box();
for(var i=0;i<5;i++){
alert(b[i]());
};
但如果我要得到结果arr = [0,1,2,3,4],我就得把i作为参数传进去并且自我执行
function box(){
var arr = [];
for(var i=0;i<5;i++){
arr[i] = (function(i){
return i
})(i);
};
return arr;
};
var b = box();
for(var i=0;i<5;i++){
alert(b[i]);
};
请问这是怎么理解的,为什么直接返回i就只能得到i的最终值5?谢谢各位解答!
典型的闭包,函数作用域
一个例子: