为了账号安全,请及时绑定邮箱和手机立即绑定

关于JS闭包的问题

关于JS闭包的问题

NodeOS 2016-03-05 15:46:05
在《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
}


查看完整回答
1 反对 回复 2016-03-05
  • NodeOS
    NodeOS
    谢谢!那我是不是可以这么理解:这个数组中实际上引用了十个函数,直接对数组对象进行alert等操作时,十个函数未被解析,而对数组中的每一项进行alert等操作时,这些函数才会被解析,并返回{10,10,10,10,10,10,10,10,10,10}。
  • 慕郎_莲华
    慕郎_莲华
    恩 你直接打印数组 就是显示她的值~function,需要执行
  • NodeOS
    NodeOS
    不好意思,原来是基础概念理解的有问题! 多亏了你的解析,不然我对函数的理解就一直错下去了!
点击展开后面1
  • 1 回答
  • 0 关注
  • 1475 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信