欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js基础闭包练习题

程序员文章站 2022-11-08 09:18:31
题目描述 实现函数 makeClosures,调用之后满足如下条件:1、返回一个函数数组 result,长度与 arr 相同2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同 示例1 1 //参考《JavaScript高级程序设计》的典型方法 2 ......

题目描述

实现函数 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 }