作者:安静
function curry(fn) {
// 初始可以接收任意长度的参数
return function curried(...args) {
// 参数长度与fn参数对比
if (args.length < fn.length) {
// 如果初始传入的参数小于fn的参数,说明只传递了一部分参数
// 返回一个新函数接收剩余参数
return function() {
// 递归调用到参数传递完毕
return curried(...args.concat(Array.from(arguments)))
}
}
// 说明参数传递完毕,直接执行fn函数
return fn.apply(this, args)
}
}
作者:xl
function getType(data) {
let originType = Object.prototype.toString.call(data);
let index = originType.indexOf(' ');
let type = originType.slice(index + 1, -1);
return type.toLowerCase();
}
function currying(fn, ...args) {
const len = fn.length;
return function(...params) {
let _args = [...args, ...params];
if (_args.length < len) {
return currying.call(this, fn, ..._args)
}
return fn.apply(this, _args);
}
}
作者:奥兰度
function myTypeof(target) {
return Object.prototype.toString.call(target)
}
function curry(fn, ...args) {
if (typeof fn !== 'function') throw new Error()
let len = fn.length;
return function (...args1) {
if (args.length + args1.length >= len) {
return fn.call(this, ...args, ...args1)
} else {
return curry.call(this, fn, ...[...args, ...args1])
}
}
}
function add(a, b) {
return a + b
}
const add1 = curry(add, 1)
add1(2) // 1 + 2