1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
var arr = [1,2,3]; var fn = function (x) { return x * x; } var result = makeClosures(arr,fn); (result[1]() === 4) === (fn(arr[1]) === 4) === true
var arr = [1,2,3]; var fn = function (x) { return x * x; } var result = makeClosures(arr,fn); (result[1]() === 4) === (fn(arr[1]) === 4) === true
function makeClosures(arr, fn) { var result = []; for(var i = 0; i < arr.length; i++) { result[i] = function(ele) { return function() { return fn(ele); } }(arr[i]); } return result; }forEach:
function makeClosures(arr, fn) { var result = []; arr.forEach((item,index) => { result[index] = function(ele) { return function() { return fn(ele); } }(item); }) return result; }
var makeClosures = (arr, fn) => arr.map((v) => () => fn(v));
function makeClosures(arr, fn) { return arr.map(e => function(){ return fn(e) }) }
function makeClosures(arr, fn) { return arr.map(e => () => fn(e) ) }
function makeClosures(arr, fn) { var result =[]; //let 声明的变量只在 let 命令所在的代码块 {} 内有效,块级作用域 for(let i = 0; i < arr.length; i++){ result[i] = function(){ return fn(arr[i]); }; } return result; } function makeClosures(arr,fn){ var result = []; //array.forEach(function(currentValue, index, arr), thisValue) //forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数 //参数1:必需。当前元素, //参数2:可选。当前元素的索引值 //参数3:可选。当前元素所属的数组对象 arr.forEach(function(num){ result.push(function(){ return fn(num); }) }) return result; }
var result = [];
for (let i = 0; i < arr.length; i++) {
result[i] = function () {
return fn(arr[i]);
};
}
return result;
var result = [];
for (var i = 0; i < arr.length; i++) {
(function (i) {
result[i] = function () {
return fn(arr[i]);
};
})(i);
}
return result;
var result = [];
arr.forEach(function (item) {
result.push(function () {
return fn(item);
});
});
return result;
var result = [];
function makeFnCallback(i){
return function(){
return fn(arr[i]);
}
}
for(var i = 0; i < arr.length; i++){
result[i] = makeFnCallback(i);
}
return result;
//看到一位同学的回答,精简了自己的代码 function makeClosures(arr, fn) { return arr.map(function(curr){ return function(){ return fn.call(null, curr); }; }) } //当然使用bind也可以做到的,这样就不用使用匿名函数包裹了 function makeClosures(arr, fn) { return arr.map(function(curr){ return fn.bind(null, curr); }); }