科里化,就是將接受多個引數的函式變換成接受乙個單一引數的函式。
閉包的應用場景就是函式科里化。(延長變數的生命週期)
引數復用,利用閉包將函式的引數儲存起來,等引數達到一定數量時執行函式
fn(x, y) -> fn(x)(y)
上面的**就是把fn函式做成巢狀函式,外層函式的返回值是內層函式。外層函式呼叫完之後,能接著呼叫。
科里化執行函式的核心是:有引數傳入時,收集引數,返回函式;收集引數完畢,執行,返回值。
fn指的是源處理函式,如sum,currargs 是呼叫curry時傳入的引數列表,比如(1,2)(3)
functioncurry(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...