题目描述
实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
示例1
输入
复制
[1, 2, 3], function (x) { return x * x; }
输出
复制
4
知识点:
闭包:如果在函数func内部声明函数inner,然后在函数外部调用inner,这个过程即产生了一个闭包。闭包可以理解成“定义在一个函数内部的函数”。
1.用迭代
function makeClosures(arr, fn) {
var result =[];
for(i=0;i<arr.length;i++){
result[i]=fun(i);
}
function fun(i){
return function(){
return fn(arr[i]);
}
}
return result;
}
2.用forEach
function makeClosures(arr, fn) {
var result =[];
arr.forEach(function(i){
result.push(function(){
return fn(i)
});
})
return result;
}