函式柯里化的實現
阿新 • • 發佈:2021-08-24
函式柯里化指的是一種將使用多個引數的一個函式轉換成一系列使用一個引數的函式的技術。
function curry(fn, args) { // 獲取函式需要的引數長度 let length = fn.length; args = args || []; return function() { let subArgs = args.slice(0); // 拼接得到現有的所有引數 for(let i = 0; i < arguments.length; i++) { subArgs.push(arguments[i]); }// 判斷引數的長度是否已經滿足函式所需引數的長度 if (subArgs.length >= length) { // 如果滿足,執行函式 return fn.apply(this, subArgs); } else { // 如果不滿足,遞迴返回科裡化的函式,等待引數的傳入 return curry.call(this, fn, subArgs) } } }
ES6實現版本
function curry(fn, ...args) {return fn.length <= args.length ? fn(...args) : curry.bind(null, fn, ...args); }