題目描述 實現函數 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 }