天天看點

《JavaScript應用程式設計》一一2.16 偏函數應用與函數加裡化

本節書摘來華章計算機出版社《javascript應用程式設計》一書中的第2章,第2.16節,作者:eric elliott 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

偏函數應用是指将一個擁有多個參數的原函數包裹,随後傳回一個接受少量參數的新函數。它将參數存放在閉包中,是以在調用時隻需提供那些未确定的參數。假設你有一個名為multiply()的函數,它接受兩個參數x與y,當你發現在使用multiply()時,其中一個參數通常是固定的,你可以對其使用偏函數應用技術:

在es5規範中,你可以使用function.prototype.bind()方法制造偏函數。此方法唯一的缺點是當你使用call()或者apply()調用函數時,不能重寫函數内部this指向。如果你的函數中this有明确的指向,建議你不要使用bind()方法,下面示範了用bind()方法生成multiply函數的偏函數。

可能你聽說過“函數加裡化”這個術語,這兩者經常容易被弄混淆。不同之處在于,函數加裡化是将一個接受多個參數的函數轉變為一組支援鍊式調用的函數鍊,其中每個函數僅有一個入參。

例如,函數add(1,2,3)在經過加裡化後調用方式将變為add(1)(2)(3),每一次調用都在前一次函數執行的結果之上,這個概念在lambda calculus中十分重要。然而,由于javascript函數本身支援傳入多個參數,是以函數加裡化在多數javascript應用中較為少見。

繼續閱讀