js 函式式程式設計

2022-05-08 17:12:17 字數 2169 閱讀 9230

這兩天看書看到了函式式程式設計那節,感覺學到了挺多東西,之前看別人**都寫的挺漂亮,現在我寫的**是有點亂,所以還是要學習下別人的程式設計模式..

(1)平常寫的函式大多是接受值,合併值,返回值,比如經常寫的for迴圈:

function printarray(array)      

}

但是如果我們想做print之外的事情呢?怎麼辦?再寫乙個相似的,未免顯得浪費,我們可以這樣

function foreach(array,action)  

}foreach(["a","b","c"],print);

通過利用匿名函式,在編寫for迴圈之類的可以省去很多無用的細節:

function

sum(numbers))

return

total;

}

上面的例子中是「遍歷陣列」,並使其抽象化,函式作為函式引數傳入....

(2)另一種是傳入函式引數,返回函式,可以在「高階函式」中傳入arguments

function

negate(func)

}var isnotnan =negate(isnan);

isnotnan(nan);

傳說中的組合模式:

function

compose(f1,f2);

}var isnotnan = compose(op["!"],isnan);

isnotnan(5); =>true

間接函式呼叫,如果執行次數較多還是不要用的好..

(3)sum函式實際上是演算法的乙個變體,該演算法通常稱為規約

function

reduce(combine,base,array));

}function

add(a,b)

reduce(add,0,array);

(4)另外乙個與陣列相關的有用的基本演算法稱為「對映」。它能夠遍歷陣列

function

map(func,array));

return

result;

}map(math.round,[0.01,2,9,math.pi]);

(5)下面這段**,可以研究下它的工作原理

function

splitparagraph(text);

return [frag].concat(split(end+1)); //

** } else

if(text.charat(pos) == ";

return [frag].concat(split(end+1)); //

** } else

;

return

[frag].concat(split(end));}}

function

findclosing(character,from)

function

findopeningorend(from)

return math.min(indexorend("*"),indexorend("

return split(0);

}

這種函式的程式設計風格很獨特,使用遞迴而不是迴圈,其實遞迴效率是比較低的,改進如下:

function

split());

pos = end+1;

}else

if(text.charat(pos) == "",pos+1);

fragments.push();

}else

); pos =end;}}

return

fragments;

}

(6)分布應用模式

function

partial(func)

for(var i=0;i)

,realargs);

}}map(partial(op["+"],1),[0,2,4,6,8,10]); //

op["+"] swithcase 的乙個function

js函式式程式設計

1,函式式程式設計 2,物件導向程式設計 工廠,單例,觀察者,發布訂閱者等23中設計模式 3,過程式程式設計 強調將計算過程分解成可復用的函式 只有純的 沒有 的函式,才是合格的函式 函式式程式設計只是範疇論的運算方法,跟數理邏輯 微積分 行列式是同一類東西,都是數學方法,只是碰巧它能用來寫程式。在...

js 函式式程式設計

函式式程式設計,顧名思義,是使用函式的形式來程式設計,隨著react居高不下的人氣,函式式程式設計逐漸流行了起來。為什麼要使用函式式程式設計,能給我們帶來哪些好處呢?下面將一一介紹 對於相同的輸入,永遠會得到相同的輸出,而且沒有任何可觀察的 也不依賴外部環境的狀態。舉個不是純函式例子 var min...

JS 之 函式式程式設計

由若干個純函式 偏函式 柯里化函式組合成乙個新的函式,同時,形成資料傳遞。挑選了一系列所需要的函式,把他們組合在一起,可以實現公共合作的效果。示例 function combination x var arr combination add,spl,toupper 三個函式,三個函式的資料都是相關聯...