javascript 闭包 closure
* 实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
input:
[1, 2, 3], function (x) { return x * x; }
function makeClosures(arr, fn) { var result = []; for (var i = 0; i < arr.length; i++) { (function(i) { result.push(function() { return fn(arr[i]); }); })(i); } return result; } var arr = [1, 2, 3]; var fn = function (x) { return x * x; } var result = makeClosures(arr, fn); console.log(result); // [f,f, f, f] console.log(result[1]()); // 4 console.log(fn(arr[1])); // 4
已知函数 fn 执行需要 3 个参数。请实现函数 partial,调用之后满足如下条件:
1、返回一个函数 result,该函数接受一个参数
2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致
input: var sayIt = function(greeting, name, punctuation) { return greeting + ', ' + name + (punctuation || '!'); }; partial(sayIt, 'Hello', 'Ellie')('!!!');
output: Hello, Ellie!!!
function partial(fn, str1, str2) { return function(str3) { return fn(str1, str2, str3); } } var sayIt = function(greeting, name, punctuation) { return greeting + ', ' + name + (punctuation || '!'); }; console.log( partial(sayIt, 'Hello', 'Ellie')('!!!') );