在圖書館翻書,看到這本今年出版,很薄的書,翻起來看了幾頁,感覺寫的通俗易懂,大概記錄一下。
- 什麼是函數是編程
函數式編程技術主要基於 數學函數和它的思想
數學中的函數有什麼特點?
如f(X)=Y:
- 函數必須總是接收一個參數
- 函數必須總是返回一個值
- 函數應該依據接收到的參數,而不是外部環境運行
JS 函數
var percnetValue = 5;
var calculateTax = (value) => {return value/100 * (100+ percnetValue)}
calculateTax函數,用數學中函數的定義分析,它依賴了全局變量percnetValue,因此在數學意義上就不能成爲一個真正的函數。
用數學函數的思想。重新寫一下這個函數
var calculateTax = (value, percnetValue) => {return value/100 * (100+ percnetValue)}
通過這個例子,我們定義一下函數式編程:
函數式編程是一種範式,是僅依賴輸入就可以完成自身邏輯的函數。
函數與方法的區別:
函數是一段可以通過其名稱被調用的代碼,可以傳遞參數並返回值
方法是一段必須通過其名稱及其關聯對象的名稱被調用的代碼
var simple = (a) => {return a} //一個簡單的函數
simple(5) // 名稱調用
var obj = {simple: (a) => {return a}} // 一個簡單的方法
obj.simple(5) // 名稱及其關聯對象調用
引用透明性
根據函數的定義,可以得出結論,所有的函數對於相同的輸入都將返回相同的值。命令式、聲明式、抽象
命令式:如何做
我們告訴編譯器“獲得長度,循環數組,用索引獲取每一個數組元素,等等”
var array = [1,2,3]
for(i=0,i<array.length;i++):
console.log(array(i))
聲明式:做什麼
告訴編譯器做什麼,移除了如何做的部分
var array = [1,2,3]
array.forEach((element) => console.log(element))
函數式編程主張以抽象的方式創建函數,以利於重用