手寫柯里化

2022-06-21 03:24:07 字數 1098 閱讀 4516

科里化,就是將接受多個引數的函式變換成接受乙個單一引數的函式。

閉包的應用場景就是函式科里化。(延長變數的生命週期)

引數復用,利用閉包將函式的引數儲存起來,等引數達到一定數量時執行函式

fn(x, y) -> fn(x)(y)

上面的**就是把fn函式做成巢狀函式,外層函式的返回值是內層函式。外層函式呼叫完之後,能接著呼叫。

科里化執行函式的核心是:有引數傳入時,收集引數,返回函式;收集引數完畢,執行,返回值。

fn指的是源處理函式,如sum,currargs 是呼叫curry時傳入的引數列表,比如(1,2)(3)

function

curry(fn, currargs)

//遞迴呼叫,判斷args的個數,是否與fn的引數相對能,相等了就可以把引數都傳給fn,進而輸出;否則繼續遞迴呼叫,一直到兩者相等。

if(args.length < fn.length)

, args);

}}function

sum(a, b, c)

const fn =curry(sum);

fn(1, 2, 3); //

6fn(1, 2)(3); //

6

第二種方法,

const curry = (fn) =>

return

function

curriedfn (...args)

}////

//obj:這個物件將代替function類裡this物件

//args:這個是陣列,它將作為引數傳給function(args-->arguments)

, args)

//args作為引數,被fn呼叫。

} }

const multiply = (x, y, z) => x*y*z;

const currymul =curry(multiply);

const result = currymul(1)(2)(3); //

1*2*3 = 6

console.log('result',result)

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

手寫函式柯里化(Curry) 原理剖析

前端使用柯里化的用途主要就是簡化 結構,提高系統的維護性,乙個方法,只有乙個引數,強制了功能的單一性,很自然就做到了功能內聚,降低耦合。降低 的重複,提高 的適用性。在後面實現應用部分 ajax 會體現出來呼叫時的 精簡 呼叫形式 function add a,b,c,d var newadd cu...