你是否知道JavaScript其實也是一個函數(shù)式編程語言呢?本指南將教你如何利用JavaScript的函數(shù)式特性。
要求:你應(yīng)當(dāng)已經(jīng)對JavaScript和DOM有了一個基本的了解。
寫這篇指南的目的是因為關(guān)于JavaScript編程的資料太多了但是極少的資料提到了JavaScript的函數(shù)式特性。在本指南中,我只會講解這些基本知識而不會深入其它的函數(shù)式語言或這是Lambda算子。
你可以點擊所有的例子然后你所看到的代碼就會被執(zhí)行,這樣就可以令指南變得具有交互性。你也可以使用這個沙箱來嘗試。
我們將首先介紹匿名函數(shù)。一個匿名函數(shù)就是一個沒有名字的函數(shù)。
你可以認為他們是一次性函數(shù)。當(dāng)你只需要用一次某個函數(shù)式,他們就特別有用。通過使用匿名函數(shù),沒有必要把函數(shù)一直放在內(nèi)存中,所以使用匿名函數(shù)更加有效率。
例Example:
下面兩個函數(shù)處理同樣的事情,而average在給z賦值結(jié)束之后一直保留——但匿名函數(shù)則不會。
function average(x,y) { return (x+y)/2; } var z = average(1,3); alert(z); var z = function(x,y) { return (x+y)/2; } (1,3); alert(z); 這很自然得引出了我們下面的一節(jié)課函數(shù)作為值。
事實上,我們一般在JavaScript中聲明函數(shù)的方式可以看作是一個簡化了的語法(也就是語法糖,syntactic sugar)。
例:
下面兩個表達式其實完全一樣。所以左邊的表達式僅僅是右邊的簡寫。function average(x,y) { return (x+y)/2; } alert( average(1,3) ); var average = function(x,y) { return (x+y)/2; } alert( average(1,3) ); 從這里可以得出一個結(jié)論,函數(shù)是一個值就像字符串、數(shù)字或數(shù)組一樣。這還出現(xiàn)幾個問題:
例:
這個例子演示了如何把函數(shù)作為參數(shù)傳遞。
var applyFun = function (f,x,y) { return f(x,y); }; var add = function(x,y) { return x+y; }; alert( applyFun(add,3,4) ); // 7 在JavaScript中,有兩種調(diào)用函數(shù)的方式。一般的方式是把參數(shù)放在括號中,如alert(42)。另一種方式是同時把函數(shù)和參數(shù)都放在括號中,如(alert)(42)。
例:
alert(42);
(alert) (42);
(function(x) { alert(x-13); }) (55); 為什么函數(shù)兩邊的括號很重要:如果你寫了括號,那么在括號中的代碼就會被先計算。在計算之后,括號所在的地方就會有一個值。這個值可能是一個字符串、一個數(shù)字或一個函數(shù)。
新聞熱點
疑難解答
圖片精選