1. 程式人生 > >js的函數式編程-柯裏化

js的函數式編程-柯裏化

柯裏化 數量 調用 支持 比較 大於 stl clas 16px

Currying 為實現多參函數提供了一個遞歸降解的實現思路——把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受余下的參數而且返回結果的新函數,在某些編程語言中(如 Haskell),是通過 Currying 技術支持多參函數這一語言特性的。 所以 Currying 原本是一門編譯原理層面的技術,用途是實現多參函數。 在《Mostly adequate guide》一書中,這樣總結了 Currying ——只傳遞給函數一部分參數來調用它,讓它返回一個函數去處理剩下的參數。
function currying(fn, ...args) {
  if (args.length >= fn.length) {
    
return fn(...args); } return function(...args2) { return currying(fn, ...args, ...args2); }; }

核心思想:比較多次接受的參數總數與函數定義時的入參數量,當接受參數的數量大於或等於被 Currying 函數的傳入參數數量時,就返回計算結果,否則返回一個繼續接受參數的函數。 Currying的作用:

1.參數復用:固定參數,根據curring後傳入的參數不同實現函數的不同計算值

2.延遲執行:利用curring 函數實現返回一個函數,其執行結果是返回一個傳入函數的執行結果 如:
function currying (fn, ...args1) { 
  return function (...args2) {
     return fn(...args1, ...args2) 
   } 
}

總結:curring 的實質是利用閉包的原理來占存一部分參數,並返回一個函數,其執行結果是傳入函數的執行結果。

js的函數式編程-柯裏化