作者:安静
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
