// // function currying(fn,...args){
// // if(fn.length <= args.length){
// // return fn(...args)
// // }
// // return function(...args1){
// // return currying(fn,...args,...args1)
// // }
// // }
// // function add(a,b,c){
// // return a + b + c //fn.length =3
// // }
// // add(1,2,3) // 6
// // var curryingAdd = currying(add);
// // let num = curryingAdd(1)(2)(3) // 6
// // console.log(num)
// function add (...args) {
// // return args.reduce((a, b) => a + b)
// return args.reduce((a, b) => a + ' ' + b)
// }
// function currying (fn) {
// let args = []
// return function _c (...newArgs) {
// if (newArgs.length) {
// args = [
// ...args,
// ...newArgs
// ]
// return _c
// } else {
// return fn.apply(this, args)
// }
// }
// }
// let addCurry = currying(add)
// // 注意调用方式的变化
// console.log(addCurry('Hello')('World')())
// // //简化
// function functionFunction(str) {
// console.log(str,arguments)
// var ret = Array.prototype.slice.call(arguments).join(', ');
// console.log(ret)
// var temp = function(str) {
// console.log(str)
// ret = [ret, Array.prototype.slice.call(arguments).join(', ')].join(', ');
// console.log(ret)
// return ret;
// };
// console.log(temp,111)
// temp.toString = function(){
// console.log(ret)
// return ret;
// };
// return temp;
// }
// let a = functionFunction('Hello')('World')('Hello')('World').toString();
// console.log('end',a)
// 定长参数
function add (a, b, c, d) {
return [
...arguments
].reduce((a, b) => a + b)
}
function currying (fn) {
let len = fn.length
let args = []
return function _c (...newArgs) {
// 合并参数
args = [
...args,
...newArgs
]
// 判断当前参数集合args的长度是否 < 目标函数fn的需求参数长度
if (args.length < len) {
// 继续返回函数
return _c
} else {
// 返回执行结果
return fn.apply(this, args.slice(0, len))
}
}
}
let addCurry = currying(add)
console.log(addCurry(1)(2, 3)(4))
// let total = addCurry(1)(2)(3)(4) // 同时支持addCurry(1)(2, 3)(4)该方式调用
// console.log(total) // 10
Function.prototype.uncurrying = function() {
var that = this;
return function() {
return Function.prototype.call.apply(that, arguments);
}
};
function sayHi () {
return "Hello " + this.value +" "+[].slice.call(arguments);
}
let sayHiuncurrying=sayHi.uncurrying();
console.log(sayHiuncurrying({value:'world'},"hahaha"));
console