- 相關(guān)推薦
JavaScript 函數式編程實(shí)踐
函數式編程簡(jiǎn)介
說(shuō)到函數式編程,人們的第一印象往往是其學(xué)院派,晦澀難懂,大概只有那些蓬頭散發(fā),不修邊幅,甚至有些神經(jīng)質(zhì)的大學(xué)教授們才會(huì )用的編程方式。這可能在歷史上的某個(gè)階段的確如此,但是近來(lái)函數式編程已經(jīng)在實(shí)際應用中發(fā)揮著(zhù)巨大作用了,而更有越來(lái)越多的語(yǔ)言不斷的加入諸如 閉包,匿名函數等的支持,從某種程度上來(lái)講,函數式編程正在逐步“同化”命令式編程。
函數式編程思想的源頭可以追溯到 20 世紀 30 年代,數學(xué)家阿隆左 . 丘奇在進(jìn)行一項關(guān)于問(wèn)題的可計算性的研究,也就是后來(lái)的 lambda 演算。lambda 演算的本質(zhì)為 一切皆函數,函數可以作為另外一個(gè)函數的輸出或者 / 和輸入,一系列的函數使用最終會(huì )形成一個(gè)表達式鏈,這個(gè)表達式鏈可以最終求得一個(gè)值,而這個(gè)過(guò)程,即為計算的本質(zhì)。
然而,這種思想在當時(shí)的硬件基礎上很難實(shí)現,歷史最終選擇了同丘奇的 lambda 理論平行的另一種數學(xué)理論:圖靈機作為計算理論,而采取另一位科學(xué)家馮 . 諾依曼的計算機結構,并最終被實(shí)現為硬件。由于第一臺計算機即為馮 . 諾依曼的程序存儲結構,因此運行在此平臺的程序也繼承了這種基因,程序設計語(yǔ)言如 C/Pascal 等都在一定程度上依賴(lài)于此體系。
到了 20 世紀 50 年代,一位 MIT 的教授 John McCarthy 在馮 . 諾依曼體系的機器上成功的實(shí)現了 lambda 理論,取名為 LISP(LISt Processor), 至此函數式編程語(yǔ)言便開(kāi)始活躍于計算機科學(xué)領(lǐng)域。
函數式編程語(yǔ)言特性
在函數式編程語(yǔ)言中,函數是第一類(lèi)的對象,也就是說(shuō),函數 不依賴(lài)于任何其他的對象而可以獨立存在,而在面向對象的語(yǔ)言中,函數 ( 方法 ) 是依附于對象的,屬于對象的一部分。這一點(diǎn) j 決定了函數在函數式語(yǔ)言中的一些特別的性質(zhì),比如作為傳出 / 傳入參數,作為一個(gè)普通的變量等。
區別于命令式編程語(yǔ)言,函數式編程語(yǔ)言具有一些專(zhuān)用的概念,我們分別進(jìn)行討論:
匿名函數
在函數式編程語(yǔ)言中,函數是可以沒(méi)有名字的,匿名函數通常表示:“可以完成某件事的一塊代碼”。這種表達在很多場(chǎng)合是有用的,因為我們有時(shí)需要用函數完成某件事,但是這個(gè)函數可能只是臨時(shí)性的,那就沒(méi)有理由專(zhuān)門(mén)為其生成一個(gè)頂層的函數對象。
【JavaScript 函數式編程實(shí)踐】相關(guān)文章:
javascript編程異常處理的方法08-04
Javascript函數的定義和用法分析08-15
JavaScript中push(),join() 函數實(shí)例詳解09-05
最常用的20個(gè)javascript方法函數09-10
JavaScript中常見(jiàn)的字符串操作函數及用法07-24
關(guān)jQuery彈出窗口簡(jiǎn)單實(shí)現代碼-javascript編程06-07