第一题:
/** * 题目:已知函数 fn 执行需要 3 个参数。请实现函数 partial,调用之后满足如下条件: * 1、返回一个函数 result,该函数接受一个参数 * 2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致 * @param fn * @param str1 * @param str2 */ function partial(fn, str1, str2) { var result = function (str3) { return fn(str1,str2,str3); }; return result; } //输入 var sayIt = function(greeting, name, punctuation) { return greeting + ', ' + name + (punctuation || '!'); }; console.log(partial(sayIt, 'Hello', 'Ellie')('!!!')); //输出 //Hello, Ellie!!!
第二题:
/** * 函数 useArguments 可以接收 1 个及以上的参数。 * 请实现函数 useArguments,返回所有调用参数相加后的结果。 * 本题的测试参数全部为 Number 类型,不需考虑参数转换。 * @param num * @returns {number} */ function useArguments(num) { var sum = 0; for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } return sum; } //输入:1,2,3,4 输出:10 console.log(useArguments(1,2,3,4));
第三题:
/** * 实现函数 partialUsingArguments,调用之后满足如下条件: 1、返回一个函数 result 2、调用 result 之后,返回的结果与调用函数 fn 的结果一致 3、fn 的调用参数为 partialUsingArguments 的第一个参数之后的全部参数以及 result 的调用参数 * @param fn */ function partialUsingArguments(fn) { var newArguments0 = Array.prototype.slice.call(arguments); var newArguments1 = Array.prototype.slice.call(arguments,1); var result = function () { return fn.apply(null,newArguments1.concat(newArguments0)); }; return result; }
第三题尝试做出来了但还不是太懂,等弄懂了再来更新。