练习牛客网笔试题--前端js--34-使用闭包
// 题目描述
// 实现函数 makeClosures,调用之后满足如下条件:
// 1、返回一个函数数组 result,长度与 arr 相同
// 2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
// 输入
// [1, 2, 3], function (x) {
// return x * x;
// }
// 输出 4
1.自己的练习
// 1. map 方法,返回新数组
function makeClosures(arr, fn) {
return arr.map(v => {
return () => fn(v);
});
}
// 2. forEach 方法,遍历创建数组
function makeClosures(arr, fn) {
var result = [];
arr.forEach((v, i) => {
result[i] = () => fn(v);
});
return result;
}
// 0. 分析的过程
function makeClosures(arr, fn) {
return result = [
function fun () {
return fn(arr[0]);
},
function() {
return fn(arr[1]);
},
function() {
return fn(arr[2]);
},
];
}
2.题解
// 1.bind方法
function makeClosures(arr, fn) {
let result=[];
for(let i=0;i<arr.length;i++){
result[i]=fn.bind(this,arr[i]);
}
return result;
}