题目描述
实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
示例1
输入
[1, 2, 3], function (x) {
return x * x;
}
输出
4
1.闭包
function makeClosures(arr, fn) {
var r=[];
for(var i=0;i<arr.length;i++){
(function(i){
r[i]=function(){
return fn.call(null,arr[i]);
}
})(i);
}
return r;
}
或者参考《JavaScript高级程序设计》的典型方法:
function makeClosures(arr, fn) {
var result = new Array();
for(var i=0;i<arr.length;i++){
result[i] = function(num){
return function(){
return fn(num);
}
}(arr[i]);
}
return result;
}
2.let,块级作用域
function makeClosures(arr, fn) {
var result = new Array();
for(let i=0;i<arr.length;i++){
result[i] = function(){
return fn(arr[i]);
};
}
return result;
}
3.bind
function makeClosures(arr, fn) {
var result = new Array();
for(var i=0;i<arr.length;i++){
result[i] = fn.bind(null,arr[i]);
}
return result;
}
4.forEach
function makeClosures(arr, fn) {
var result = new Array();
arr.forEach(function(curr){
result.push(function(){return fn(curr)});
})
return result;
}