在《JavaScript高级程序设计(第3版)》(Nicholas C.Zakas 著) 的“7.2闭包”一节中,作者为了说明“闭包所保存的是整个变量对象,而不是某个特殊的变量”,举了一个例子,代码如下:function createFunctions(){
var result = new Array();
for (var i=0;i<10;i++){
result[i] = function(){
return i;
};
}
return result;
}作者说,这个函数设计的目的是返回一个数组{0,1,2,3,4,5,6,7,8,9},但是实际上会返回{10,10,10,10,10,10,10,10,10,10}。那么问题来了,为什么我去调试,返回的是:{ function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} }WTF!!!!!!!P.S. 我用的是alert和document.write命令,代码如下: function test(){
var result = new Array();
for (var i=0;i<10;i++){
result[i] = function(){
return i;
};
}
alert(result);
//document.write(result); 试了也不行,也没解析内嵌的匿名函数。
}
1 回答
已采纳
慕郎_莲华
TA贡献83条经验 获得超16个赞
没错的~~~result的值 都是一个函数~return 10;
var a = createFunctions(); // 得到返回的result for(var i = 0; i < a.length; i++){ console.log(a[i]())//每个值都是函数function(){return 10;},执行就输出10 }
添加回答
举报
0/150
提交
取消