這兩天看書看到了函式式程式設計那節,感覺學到了挺多東西,之前看別人**都寫的挺漂亮,現在我寫的**是有點亂,所以還是要學習下別人的程式設計模式..
(1)平常寫的函式大多是接受值,合併值,返回值,比如經常寫的for迴圈:
function printarray(array)}
但是如果我們想做print之外的事情呢?怎麼辦?再寫乙個相似的,未免顯得浪費,我們可以這樣
function foreach(array,action)}foreach(["a","b","c"],print);
通過利用匿名函式,在編寫for迴圈之類的可以省去很多無用的細節:
functionsum(numbers))
return
total;
}
上面的例子中是「遍歷陣列」,並使其抽象化,函式作為函式引數傳入....
(2)另一種是傳入函式引數,返回函式,可以在「高階函式」中傳入arguments
functionnegate(func)
}var isnotnan =negate(isnan);
isnotnan(nan);
傳說中的組合模式:function
compose(f1,f2);
}var isnotnan = compose(op["!"],isnan);
isnotnan(5); =>true
間接函式呼叫,如果執行次數較多還是不要用的好..
(3)sum函式實際上是演算法的乙個變體,該演算法通常稱為規約
functionreduce(combine,base,array));
}function
add(a,b)
reduce(add,0,array);
(4)另外乙個與陣列相關的有用的基本演算法稱為「對映」。它能夠遍歷陣列
functionmap(func,array));
return
result;
}map(math.round,[0.01,2,9,math.pi]);
(5)下面這段**,可以研究下它的工作原理
functionsplitparagraph(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);
}
這種函式的程式設計風格很獨特,使用遞迴而不是迴圈,其實遞迴效率是比較低的,改進如下:
functionsplit());
pos = end+1;
}else
if(text.charat(pos) == "",pos+1);
fragments.push();
}else
); pos =end;}}
return
fragments;
}
(6)分布應用模式
functionpartial(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 三個函式,三個函式的資料都是相關聯...