理解柯里化
JavaScript函式柯里化,我們直接來看一段普通的程式碼:
function (a, b, c) {
return a * b * c;
}
上面這個函式很簡答, 就是對傳入的a、b、c
引數進行了計算,現在我們改成柯里化的形式:
// 柯里化的形式
function curry(a) {
return (a) => {
return (b) => {
return a * b * c;
}
}
}
你會發現,將普通函式改成柯里化的形式無非就是巢狀返回多個函式,我們在呼叫的時候,只需要這樣呼叫:
// 呼叫柯里化函式
const num1 = curry(1)(2)(3); // 6
// 或者
const num2 = curry(1);
const num2_total = num2(2)(3); // 6
呼叫也很簡單,無非就是將返回返回的函式在執行一下。
這裡由於閉包的原因,返回的函式仍然可以拿到(引用)上一個傳遞的引數。
柯里化的應用場景
任何一段程式碼,如果沒有應用場景,將毫無價值。
這裡,前面雖然我們簡單的理解了柯里化,但是有哪些場景呢?為什麼需要把原本很簡單的函式題包裝成巢狀多層的函式?
我們考慮下這樣的場景:
我們在淘寶上售賣一件商品,原價200元,在十月一號國慶節這一天,我們需要促銷打8折售賣,而在雙十一這一天,我們需要打5折售賣,此時,我們就需要計算打折後的售賣價格。
這裡,我們先來看普通的編寫方式:
// 封裝一個計算函式
function countPrice(price, discount) {
return price * discount;
}
const price1 = countPrice(200, 0.8); // 國慶節促銷價格
const price2 = countPrice(200, .05); //雙十一促銷價格
上面程式碼很容易理解,我們定義了一個接受兩個引數(arity)
的函式,分別來計算國慶節和雙十一的促銷價格。
沒毛病嗎?
上面程式碼沒毛病,但是仔細一想,price
引數沒必要每次都傳啊,如果我們每個月甚至每天都有打折促銷,豈不是要寫很多,要傳遞很多price
引數。
如果我們改成柯里化的形式:
// 柯里化的形式
function countPrice(price) {
return (discount) => {
return price * discount;
}
}
const price = countPrice(200);
const price_total1 = price(0.8); // 國慶節價格
const price_total2 = price(0.5); // 雙十一價格
const price_total3 = price(0.7); // 雙十二價格
const price_total2 = price(0.8); // 元旦價格
這裡,我們通過柯里化的形式,省去了頻繁傳遞的引數,這就是柯里化的作用, 可以更輕鬆的重用和配置。
總結
柯里化優點:
- 更輕鬆的配置和重用程式碼;
- 避免頻繁的傳遞重複的引數。
相關文章
- 簡單理解JavaScript中的柯里化和反柯里化JavaScript
- 「譯」理解JavaScript的柯里化JavaScript
- 【譯】理解JavaScript中的柯里化JavaScript
- JavaScript柯里化JavaScript
- 高階函式應用 —— 柯里化與反柯里化函式
- 函式柯里化函式
- 深入理解javascript系列(十七):函式柯里化JavaScript函式
- JavaScript函式柯里化JavaScript函式
- JS:函式柯里化JS函式
- Js函式柯里化JS函式
- JAVAScript柯里化、部分應用引數終極理解JavaScript
- 用場景去理解函式柯里化(入門篇)函式
- 「前端面試題系列6」理解函式的柯里化前端面試題函式
- 柯里化函式之Javascript函式JavaScript
- Javascript currying柯里化詳解JavaScript
- 函式的合成與柯里化函式
- JavaScript函式柯里化詳解JavaScript函式
- JavaScript函式柯里化的作用JavaScript函式
- 一道柯里化面試題面試題
- JS 分步實現柯里化函式JS函式
- JS專題之函式柯里化JS函式
- JavaScript進階之函式柯里化JavaScript函式
- js柯里化函式的好處JS函式
- 前端之函式柯里化Currying前端函式
- [譯] 柯里化與函式組合函式
- [譯] JavaScript中的函式柯里化JavaScript函式
- JavaScript 專題之函式柯里化JavaScript函式
- 【新手教程】JavaScript的柯里化函式JavaScript函式
- 從 ES6 高階箭頭函式理解函式柯里化函式
- Ramda.js中的柯里化實現JS
- JS中的 偏函式 和 柯里化JS函式
- 用大白話介紹柯里化函式函式
- JS高階函式-函式柯里化JS函式
- 大佬,JavaScript 柯里化,瞭解一下?JavaScript
- 函式式JavaScript(4):函式柯里化函式JavaScript
- 函式柯里化和偏函式應用函式
- 前端戰五渣學JavaScript——函式柯里化前端JavaScript函式
- 「前端進階」徹底弄懂函式柯里化前端函式