柯里化

Date
Created
Apr 27, 2023 02:27 AM
Tags

问题

描述

柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c),柯里化不会调用函数。它只是对函数进行转换。作用是可以轻松地生成偏函数,便于扩展
下面是一个示例
const join = (a, b, c) => { return `${a}_${b}_${c}`; }; const curriedJoin = curry(join); curriedJoin(1, 2, 3); // '1_2_3' curriedJoin(1)(2, 3); // '1_2_3' curriedJoin(1, 2)(3); // '1_2_3'
参考

实现

function curry(fn) { return function curryInner(...args) { if (args.length >= fn.length) return fn(...args); return (...args2) => curryInner(...args, ...args2); }; }
function curry(fn) { return function curried(...args) { if (args.length >= fn.length) { return fn.apply(this, args) } else { return curried.bind(this, ...args); } } }
关键是通过bind方法继续收集剩余参数