回調函數
代碼復用是衡量一個應用程序的重要標準之一。通過將變化的業務邏輯抽離封裝在回調函數中能夠有效的提高代碼復用率。比如ES5中為數組增加的forEach方法,遍歷數組,對每個元素調用同一個函數。
通過回調函數將業務的重點聚焦在回調函數中,而不必每次都要重復編寫遍歷代碼。
偏函數
作為將函數當做返回值輸出的典型應用就是偏函數。所謂偏函數是指創建一個調用另外一個部分——參數或變量已經預置的函數——的函數的用法。反正看著定義我是沒理解這東東干嘛的。咱們還是先看例子吧,偏函數最典型的例子就是類型判斷。
Javascript對象都擁有三個屬性:原型屬性、類屬性、可擴展性。(不知道的同學要回去翻犀牛書哦,page:138)類屬性是一個字符串,Javascript中并未直接提供,但我們可以利用Object.prototype.toString來間接得到。該函數總是返回如下形式:
[object Class]
因此我們可以編寫一系列isType函數。
代碼如下:
這幾個函數中大部分代碼是重復的,這時高階函數便華麗麗的登場了:
所以通過指定部分參數來返回一個新的定制函數的形式就是偏函數。
currying(柯里化)
currying又稱部分求值。一個currying的函數首先會接受一些參數,接受這些參數之后,函數并不會立即求值,而是繼續返回另一個函數,剛才傳入的參數在函數形成的閉包中被保存起來。待到函數被真正需要求值的時候,之前傳入的所有參數都會被一次性用于求值。
假設我們以計算一個月每天花銷為例:
事件節流
在某些場景下,某些事件可能會被重復的觸發,但事件處理函數并不需要每次都執行。比如在window.resize事件中進行復雜的邏輯計算,如果用戶頻繁的改變瀏覽器大小,復雜計算會對性能造成嚴重影響;有時這些邏輯計算并不需要每次rezise時都觸發,只需要計算有限的幾次便可以。這時我們需要根據時間段來忽略一些事件請求。請看以下節流函數:
通過控制函數執行時間,可以在函數執行次數與功能需求之間達到完美平衡。另一個事件是mousemove。如果我們給一個dom元素綁定該事件,鼠標在改元素上移動時,該事件便會重復觸發。
事件結束
對于某些可以頻繁觸發的事件,有時候我們希望在事件結束后進行一系列操作。這時我們可以利用高階函數做如下處理:
如果在這一過程中事件被觸發則清除上一次事件句柄,重新綁定執行時間。
參考資料:
《深入淺出node》
《Javascript設計模式與開發實踐》
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com