一、函數柯里化:
是一種高階函數技術,它將一個多參數函數轉換為一系列單參數函數的鏈式調用。
核心概念
定義:將一個函數 f(a, b, c) 轉換為 f(a)(b)? 的形式
**本質:**通過閉包保存參數,實現分步傳參
關鍵特征:每次調用只接收一個參數,返回新函數或最終結果
二、實現方法
1、基礎柯里化(固定參數)
function curry(fn) {return function curried(...args) {if (args.length >= fn.length) {return fn.apply(this, args);} else {return function(...nextArgs) {return curried.apply(this, args.concat(nextArgs));}}};
}// 使用示例
const sum = (a, b, c) => a + b + c;
const curriedSum = curry(sum);console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
2、無限參數柯里化
function infiniteCurry(fn) {return function curried(...args) {return (...nextArgs) => nextArgs.length ? curried(...args, ...nextArgs) : fn(...args);};
}// 使用示例
const add = infiniteCurry((...nums) => nums.reduce((a, b) => a + b, 0));console.log(add(1)(2)(3)(4)()); // 10
console.log(add(1, 2)(3)()); // 6
三、核心作用
參數復用:固定常用參數,生成專用函數。
延遲執行:分階段收集參數,在需要時觸發計算。
函數組合:創建可管道化的函數單元。
動態功能生成:基于配置創建定制函數。
四、典型使用場景
數據驗證:創建可復用的驗證規則鏈
API請求封裝:預配置基礎URL/headers
數據處理管道: 組合map/filter/reduce操作
配置化UI組件 :生成帶預設樣式的組件工廠
數學計算:創建特定計算器(如稅率計算器)
實踐建議
優先用于參數明確固定的場景
避免過度柯里化導致調用鏈過長(>5級)
配合TypeScript使用增強類型安全
在性能敏感場景測試開銷(多次閉包創建)