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

请问高程三中 7.2.1 - 闭包与变量 这小节中的两个例子为什么无法跑出书中的结果?

请问高程三中 7.2.1 - 闭包与变量 这小节中的两个例子为什么无法跑出书中的结果?

湖上湖 2019-03-07 15:13:37
这是例一,按照书中说的函数返回的值应该是[10,10,10,10,10,10,10,10,10,10],可是返回的确是函数体本身function createFunctions(){     var result = new Array();      for (var i=0; i < 10; i++){         result[i] = function(){             return i;         };     }      return result; } 例二也是,返回的不是下标本身而是函数体function createFunctions(){     var result = new Array();      for (var i=0; i < 10; i++){         result[i] = function(num){             return function(){                 return num;             };         }(i);     }      return result; } 我将例一改成下面这样到是可以返回数字,但返回的是下标而不是10。function createFunctions(){     var result = new Array();      for (var i=0; i < 10; i++){         result[i] = (function(){             return i;         })();     }      return result; } 请问是为什么?
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

你再读读,我第一次的时候也读错了;

这个函数会返回一个函数数组。表面上看,似乎每个函数(函数数组里的每个函数)都应该返回自己的索引值,即位置0 的函数返回0,位置1 的函数返回1,以此类推。但实际上,每个函数(函数数组里的每个函数)都返回10;
在重写了前面的createFunctions()函数后,每个函数(函数数组里的每个函数)就会返回各自不同的索引值了。


查看完整回答
反对 回复 2019-03-14
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

例1返回的是数组,只是数组的成员是函数。你看两边还有中括号

第二个同理啦

https://img1.sycdn.imooc.com//5c8a00480001679a06420488.jpg

查看完整回答
反对 回复 2019-03-14
  • 2 回答
  • 0 关注
  • 513 浏览
慕课专栏
更多

添加回答

举报

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