js基础闭包练习题

题目描述

实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
示例1
 1 //参考《JavaScript高级程序设计》的典型方法
 2 function makeClosures(arr, fn) {
 3     var result = new Array();
 4     for(var i=0;i<arr.length;i++){
 5         result[i] = function(num){
 6             return function(){
 7                 return fn(num);
 8                  
 9             }
10         }(arr[i]);
11     }
12     return result;
13 }
14 
15 //使用ES5的bind()方法
16 function makeClosures(arr, fn) {
17     var result = new Array();
18     for(var i=0;i<arr.length;i++){
19         result[i] = fn.bind(null,arr[i]);
20     }
21     return result;
22 }
23 
24 //使用forEach()
25 function makeClosures(arr, fn) {
26     var result = new Array();
27     arr.forEach(function(curr){
28         result.push(function(){return fn(curr)});
29     })
30     return result;
31 }
32 
33 //使用let
34 function makeClosures(arr, fn) {   
35     var result = new Array();
36     for(let i=0;i<arr.length;i++){
37         result[i] = function(){
38             return fn(arr[i]); //let声明的变量只在let所在代码块内有效,因此每次循环的i都是一个新的变量           
39         };
40     }
41     return result;
42 }
原文地址:https://www.cnblogs.com/xiaole9924/p/11818587.html