在《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); 试了也不行,也没解析内嵌的匿名函数。 }
慕郎_莲华
相关分类