js基礎閉包練習題

題目描述

實現函數 makeClosures,調用以後知足以下條件:
一、返回一個函數數組 result,長度與 arr 相同
二、運行 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 }
相關文章
相關標籤/搜索