編程的思維
1.指令式編程思維
2. 函數(shù)式編程思維
編程范式
函數(shù)式編程是一種編程范式叹洲,我們常見的編程范式有命令式編程(Imperative programming)运提,函數(shù)式編程闻葵,邏輯式編程笙隙,常見的面向?qū)ο缶幊淌且彩且环N命令式編程。
命令式編程是面向計(jì)算機(jī)硬件的抽象掏呼,有變量(對(duì)應(yīng)著存儲(chǔ)單元)铅檩,賦值語句(獲取,存儲(chǔ)指令)拾给,表達(dá)式(內(nèi)存引用和算術(shù)運(yùn)算)和控制語句(跳轉(zhuǎn)指令)蒋得,一句話乒疏,命令式程序就是一個(gè)馮諾依曼機(jī)的指令序列怕吴。
而函數(shù)式編程是面向數(shù)學(xué)的抽象转绷,將計(jì)算描述為一種表達(dá)式求值,一句話斧账,函數(shù)式程序就是一個(gè)表達(dá)式其骄。
函數(shù)式編程的本質(zhì)
函數(shù)式編程中的函數(shù)這個(gè)術(shù)語不是指計(jì)算機(jī)中的函數(shù)(實(shí)際上是Subroutine)拯爽,而是指數(shù)學(xué)中的函數(shù)毯炮,即自變量的映射桃煎。也就是說一個(gè)函數(shù)的值僅決定于函數(shù)參數(shù)的值大刊,不依賴其他狀態(tài)。比如sqrt(x)函數(shù)計(jì)算x的平方根搜锰,只要x不變蛋叼,不論什么時(shí)候調(diào)用狈涮,調(diào)用幾次鸭栖,值都是不變的纤泵。
在函數(shù)式語言中镜粤,函數(shù)作為一等公民肉渴,可以在任何地方定義同规,在函數(shù)內(nèi)或函數(shù)外券勺,可以作為函數(shù)的參數(shù)和返回值,可以對(duì)函數(shù)進(jìn)行組合程腹。
純函數(shù)式編程語言中的變量也不是命令式編程語言中的變量寸潦,即存儲(chǔ)狀態(tài)的單元见转,而是代數(shù)中的變量斩箫,即一個(gè)值的名稱乘客。變量的值是不可變的(immutable)寨典,也就是說不允許像命令式編程語言中那樣多次給一個(gè)變量賦值耸成。比如說在命令式編程語言我們寫“x = x + 1”,這依賴可變狀態(tài)的事實(shí)弦追,拿給程序員看說是對(duì)的花竞,但拿給數(shù)學(xué)家看约急,卻被認(rèn)為這個(gè)等式為假。
立即執(zhí)行的函數(shù)
(function(){
var num = 10;
})();
var num 是一個(gè)局部變量
變量函數(shù)
var returnFun = function(){
}
function f(){
return function(){
}
}
var x = f();
x就等于f函數(shù)的內(nèi)部函數(shù)