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、返回一个函数数组 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 }
下一篇: 美国*对云安全心存担忧