// 方法1
function curry (fn, args) {
const length = fn.length
const args = args || []
return function () {
const _args = Array.prototype.slice.call(arguments)
Array.prototype.push.apply(args, _args);
if (args.length >= length) {
return fn.apply(null, args)
} else {
return curry.call(null, fn, args)
}
}
}
// 方法2
function curry2 (fn) {
const length = fn.length
return function inner (...args) {
if (args.length >= length) {
return fn.apply(null, args)
} else {
return function (...args2) {
return inner.apply(null, args.concat(args2))
}
}
}
}
// 方法3
function curry3 (fn) {
const length = fn.length
return function inner (...args) {
if (args.length >= length) {
return fn.apply(null, args)
} else {
return inner.bind(null, ...args)
}
}
}
// 方法4
function curry4 (fn) {
const length = fn.length
if (arguments.length - 1 >= length) {
return fn.apply(null, Array.prototype.slice.call(arguments, 1))
} else {
return curry4.bind(null, ...arguments)
}
}
JS实现curry(柯里化)的四种简单方式
最新推荐文章于 2025-06-30 10:06:52 发布