javascript高级程序设计里看的
function createFunctions(){
var result = new Array();
for(var i=0;i<10;i++){
result[i] = funciton(){
return i;
};
}
return result;
}
最终result数组里的每个无素都为10,因为作用域链的关系,闭包只能取得包含函数中任何变量的最后一个值。
要想返回0、1、2.……
可以这样修改下:
function createFunctions(){
var result = new Array();
for(var i=0;i<10;i++){
result[i] = functions(num){
return function(){
return num;
}
}(i);
}
return result;
}
上面通过创建另一个匿名函数强制让闭包的行为符合预期