1. 程式人生 > >淺析javascript高階函數

淺析javascript高階函數

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高階函數