函數(shù)式 JavaScript(一)簡(jiǎn)介
讓我們假裝現(xiàn)在要完成一個(gè)任務(wù):盡可能按照函數(shù)式語言的原則來寫JavaScript代碼。
接下來一系列文章就是為了讓你們和我一起開始這樣一段旅程。首先,我們需要糾正一些你們腦子中可能有的對(duì)函數(shù)式語言錯(cuò)誤的概念。
JS語言中的函數(shù)式被嚴(yán)重誤解。
很顯然,有相當(dāng)多的開發(fā)者要每天用JavaScript的函數(shù)式范式 。我想說有更大一部分JavaScript 開發(fā)者沒有真正理解這些東西。
我認(rèn)為造成這個(gè)的原因是絕大多數(shù)用于Web服務(wù)器端的開發(fā)語言都是來源于C,而大家都知道這些語言不是函數(shù)式語言。
一般有兩個(gè)層面的困惑。第一層是關(guān)于以下示例中的用法,這是jQuery中非常常見的用法:
$(".signup").click(function(event){ $("#signupModal").show(); event.preventDefault(); });
在上面這段代碼中:我們傳了一個(gè)匿名函數(shù)作為參數(shù),這就是在JavaScript 中臭名昭著的回調(diào)函數(shù)。這些函數(shù)會(huì)被調(diào)用嗎?根本不會(huì)!
上面這個(gè)例子說明了函數(shù)式語言的一個(gè)關(guān)鍵特征:函數(shù)是一種參數(shù)。另一方面,這個(gè)例子只用三行代碼違反了幾乎所有能違反的函數(shù)式編程范式。
第二層的疑惑是更微妙的??纯催@個(gè):只有少數(shù)時(shí)髦的JS開發(fā)者是這樣看自己的:
嗯,真不錯(cuò)!但是我已經(jīng)完全了解函數(shù)式編程,我在所有的項(xiàng)目中都用了Underscore.js。
Underscore.js是一個(gè)非常著名并且隨處可見的JavaScript 庫(kù)。舉個(gè)例子:假設(shè)我有一組詞,并且我需要每個(gè)詞對(duì)應(yīng)的前兩個(gè)字母。這用Underscore.js來寫非常簡(jiǎn)單:
var firstTwoLetters = function(words){ return _.map(words,function(word){ return _.first(word,2); }); };
看這個(gè)JavaScript 例子。我用了函數(shù)式中精致又實(shí)用的函數(shù):_.map和_.first。對(duì)于這個(gè)大家有什么想法?
雖然underscore.js和 _.map這樣的函數(shù)都是很有用的函數(shù)式范式,但是像這個(gè)例子中這樣把這些東西放在一起還是讓我感到有些難以理解。我們真的需要這樣做嗎?
如果我們開始思考怎樣才能更加“函數(shù)式”,也許我們可以把上面的例子改寫成這樣:
// ...a little bit of magic var firstTwoLetters = map(first(2));
仔細(xì)想想,這一行代碼和上面的5行是一樣的效果。很多詞只是參數(shù)或占位符。真正的邏輯在于把map函數(shù)、first函數(shù)和常量2用有意義的方式組合在一起。
有些人可能在想:這個(gè)例子中的神奇之處在哪里?畢竟,說任何一個(gè)例子神奇都有點(diǎn)像吹噓,對(duì)吧?
我正打算用接下來的兩篇文章來解釋上面這個(gè)例子到底神奇在哪,如果你好奇的話,可以繼續(xù)往下看。
這一系列博客是為了幫助大家怎樣把函數(shù)式編程的美妙之處應(yīng)用到你的JavaScript代碼中。
下一節(jié)中,我將討論JavaScript 語言中函數(shù)式及非函數(shù)式的多種元素。有了這些知識(shí),我們可以通過把這些元素整合在一起,慢慢的在腦中形成函數(shù)式編程的完整體系,并且理解它們?cè)贘avaScript中的表現(xiàn)。
- JavaScript 調(diào)試器簡(jiǎn)介
- javascript 基礎(chǔ)簡(jiǎn)介 適合新手學(xué)習(xí)
- JavaScript 事件冒泡簡(jiǎn)介及應(yīng)用
- JavaScript DOM學(xué)習(xí)第一章 W3C DOM簡(jiǎn)介
- JavaScript DOM 學(xué)習(xí)第五章 表單簡(jiǎn)介
- javascript提取內(nèi)容到作為文章簡(jiǎn)介的代碼
- javascript中的window.location.search方法簡(jiǎn)介
- MongoDB中javascript腳本編程簡(jiǎn)介和入門實(shí)例
- javascript中數(shù)組的多種定義方法和常用函數(shù)簡(jiǎn)介
- 編程語言JavaScript簡(jiǎn)介
- Javascript前端UI框架Kit使用指南之Kitjs簡(jiǎn)介
- JavaScript靜態(tài)類型檢查工具FLOW簡(jiǎn)介
- JavaScript簡(jiǎn)介
相關(guān)文章
基于javascript html5實(shí)現(xiàn)多文件上傳
這篇文章主要為大家詳細(xì)介紹了基于javascript html5實(shí)現(xiàn)多文件上傳的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03服務(wù)器安全設(shè)置的幾個(gè)注冊(cè)表設(shè)置
服務(wù)器安全設(shè)置的幾個(gè)注冊(cè)表設(shè)置...2007-07-0711個(gè)教程中不常被提及的JavaScript小技巧(推薦)
這篇文章主要介紹了11個(gè)教程中不常被提及的JavaScript小技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04javascript innerText和innerHtml應(yīng)用
innerText和innerHtml看字面也應(yīng)該理解的了2010-01-01js動(dòng)態(tài)設(shè)置select下拉菜單的默認(rèn)選中項(xiàng)實(shí)例
今天小編就為大家分享一篇js動(dòng)態(tài)設(shè)置select下拉菜單的默認(rèn)選中項(xiàng)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08基于js中的存儲(chǔ)鍵值對(duì)以及注意事項(xiàng)介紹
下面小編就為大家介紹一下基于js中的存儲(chǔ)鍵值對(duì)以及注意事項(xiàng)。希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03詳解js中Number()、parseInt()和parseFloat()的區(qū)別
本文主要對(duì)js中Number()、parseInt()和parseFloat()的區(qū)別進(jìn)行詳細(xì)介紹,具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12