UNPKG

ut2

Version:

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

34 lines (30 loc) 1.1 kB
'use strict'; var native = require('./internals/native.js'); var isUndefined = require('./isUndefined.js'); var toInteger = require('./toInteger.js'); var PLACEHOLDER = { __ut2_curry_ph__: null }; var curry = function (func, arity) { arity = isUndefined(arity) ? func.length : native.mathMax(toInteger(arity), 0); function wrap() { var args = native.arrayProtoSlice.call(arguments); var context = this; function inner() { var argsInner = native.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; module.exports = curry;