实现函数 partialUsingArguments,调用之后满足如下条件:
1、返回一个函数 result
2、调用 result 之后,返回的结果与调用函数 fn 的结果一致
3、fn 的调用参数为 partialUsingArguments 的第一个参数之后的全部参数以及 result 的调用参数
1、bind方法
function partialUsingArguments(fn) {
return fn.bind(this, ...[...arguments].slice(1));
}2、call方法
function partialUsingArguments(fn) {
var arr = [...arguments].slice(1);
return function() {
return fn.call(this, ...arr, ...arguments);
}
}3、apply方法
function partialUsingArguments(fn) {
var arr = [...arguments].slice(1);
return function() {
return fn.apply(this, arr.concat(...arguments));
}
}4、es6
function partialUsingArguments(fn) {
var [_, ...arr] = arguments;
return (...args) => fn(...arr, ...args);
// return (...args) => fn.call(fn, ...arr, ...args);
}5、bind + apply 方法
function partialUsingArguments(fn) {
var arr = [...arguments].slice(1);
arr.unshift(fn); // fn、null、this都可以
return fn.bind.apply(fn,arr); // arr[0]为传给bind的第一个参数
}
function partialUsingArguments(fn) {
const param = Array.prototype.slice.call(arguments,1)
const result = function(){
return fn.apply(this,param.concat(Array.prototype.slice.call(arguments)))
}
return result
} function partialUsingArguments(fn) {
//获得函数partialUsingArguments 除第一个参数外的参数数组
var args = Array.prototype.slice.call(arguments,1);
var result = function(){
//获得函数result的参数数组
var args1 = Array.prototype.slice.call(arguments);
return fn.apply(this,args.concat(args1));
}
return result;
} function partialUsingArguments(fn) {
var arr = Array.prototype.slice.call(arguments, 1);
return function(){
arr = arr.concat(Array.prototype.slice.call(arguments));
if(arr.length < fn.length){
var temp = arr.slice();
temp.unshift(fn);
return partialUsingArguments.apply(null, temp);
} else {
return fn.apply(null, arr);
}
}
}
function partialUsingArguments(fn){
var arg=[];
for(var i=1;i<arguments.length;i++){
arg.push(arguments[i])
}
var result=function(){
var args=[];
for(var i=0;i<arguments.length;i++){
args.push(arguments[i])
}
return fn.apply(null,arg.concat(args));
};
return result;
}
function partialUsingArguments(fn) {
var _args = Array.prototype.slice.apply(arguments)
_args.shift()
var result = function(...args) {
return fn.apply(null, _args.concat(args))
}
return result
}
将...args也换成普通arguments的处理方式就能通过
function partialUsingArguments(fn) {
var arr = Array.prototype.slice.call(arguments, 1);
return function(){
var arr2 = Array.prototype.slice.call(arguments);
return arr.concat(arr2).reduce(function(pre, cur){
return pre + cur;
});
};
}