UNPKG

ut2

Version:

一个现代 JavaScript 实用工具库。[点击查看在线文档]。

32 lines (29 loc) 1.09 kB
import { mathMax, arrayProtoSlice } from './internals/native.js'; import isUndefined from './isUndefined.js'; import toInteger from './toInteger.js'; var PLACEHOLDER = { __ut2_curry_ph__: null }; var curry = function (func, arity) { arity = isUndefined(arity) ? func.length : mathMax(toInteger(arity), 0); function wrap() { var args = arrayProtoSlice.call(arguments); var context = this; function inner() { var argsInner = arrayProtoSlice.call(arguments); for (var i = 0; i < args.length; i++) { args[i] = args[i] === PLACEHOLDER && argsInner.length > 0 ? argsInner.shift() : args[i]; } args = args.concat(argsInner); var realArgsLength = args.filter(function (arg) { return arg !== PLACEHOLDER; }).length; if (realArgsLength >= arity) { return func.apply(context, args); } return inner; } return inner(); } return wrap; }; curry.placeholder = curry._ = PLACEHOLDER; export { curry as default };