淺析javascript高階函數
阿新 • • 發佈:2018-01-04
function 編寫 科學 font 目的 都是 方法 直接 pre
什麽是高階函數:在數學和計算機科學中,高階函數是至少滿足下列一個條件的函數: 1、 接受一個或多個函數作為輸入; 2、 輸出一個函數。在數學中它們也叫做算子(運算符)或泛函。微積分中的導數就是常見的例子,因為它映射一個函數到另一個函數。在函數式編程中,返回另一個函數的高階函數被稱為柯裏化的函數。
顯然 javascript 還有 python 都是擁有高階函數特性的例子。為了看到高階函數的特性,下面給出一個題目,編寫一個 add 函數,能夠滿足以下計算能力:
add(1)(2)(3)(4) // 返回10
從題設來看顯然 add(1) 返回的必然是一個函數,才能進行如上的鏈式調用。當然本題有些難度,難度在於最後需要返回一個數字,而根據前面的要求 add() 調用之後必須返回一個函數。本文的核心不在於討論其實現方法,有興趣的讀者可自行研究,下面直接出給實現源代碼:
var add = (function () {
var total=0;
function ccc (v){
total += v;
return ccc;
};
ccc.valueOf = function(){
var temp = total;
total = 0;
return temp;
}
return ccc;
})();
通過上述例子可以看出,函數 ccc 通過返回函數本身,來達到鏈式調用的目的,這是高階函數的特性之一,另外一個特性是將函數作為參數輸入。
淺析javascript高階函數