De-yu's Note
  • Deyu Notebook
  • Side Project
    • Stock
    • ChatBox
    • SnowCraft
    • ScrollBar
  • 架構問題
    • 解決 RTK Query data 為 undefined 的實務做法
    • 透過 xstate 解決UI 狀態問題
  • 技術觀點
    • 為什麼需要 store
    • Router 作用
    • react 和 next.js 差異
    • monoRepo vs Multiple Repo
  • Performance
    • React 優化
  • JS Coding
    • Curry
    • Debounce
    • Throttle
  • map
  • memo()
  • Promise 實作
  • Promise Function
  • Testing
    • 使用 Jest 、 React Testing Library 、MSW 建立測試環境
  • Miscellaneous
    • Event Loop
    • Browser
    • Code Review
    • Storage
  • AMD 、 CommonJS 、 ES modules
  • JWT
  • Next.js
  • 用過的 module
  • Internet
    • UDP
  • TCP/IP
  • SSL TLS
  • HTTP
  • AI 工作流
    • Page 1
Powered by GitBook
On this page
  1. JS Coding

Curry

在函數式編程中,Curry指的是將一個具有多個參數的函數轉換成一系列每個有一個參數的函數的過程。這允許函數以逐步的方式調用,增強了靈活性和可重用性。在JavaScript中,currying通常通過如上所示的curry函數實現,該函數檢查提供的參數數量,然後要麼調用原始函數,要麼返回另一個函數來收集更多參數,直到滿足所有參數。這種技術在預配置帶有某些參數的函數時特別有用,有助於編寫更清晰、更模組化的代碼。


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'

反覆將變數儲存 直到參數數量相等
fn.length 代表傳入的 function 有幾個參數
func.call(thisArg[, arg1[, arg2[, ...]]]) 將參數一個一個帶
func.apply(thisArg, [argsArray]) 將參數用一個 array 帶

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args)
    } 
    return function(...args2) {
      return curried.apply(this, args.concat(args2))
    }
  }
}
PreviousReact 優化NextDebounce

Last updated 28 days ago