函數語言程式設計 -- 純函式
阿新 • • 發佈:2021-06-11
什麼是純函式?
純函式:相同的輸入永遠會得到相同的輸出,而且沒有任何可觀察的副作用
// 純函式slice和不純函式splice let array=[1,3,6,8] //slice不改原陣列,第次輸出結果是一樣的,是純函式 console.log(array.slice(0,3)) console.log(array.slice(0,3)) console.log(array.slice(0,3)) // 輸出: // [1,3,6] // [1,3,6] // [1,3,6] //splice改變了原陣列,每次輸出結果不一樣,不是純函式 console.log(array.splice(0,3)) console.log(array.splice(0,3)) console.log(array.splice(0,3)) // 輸出: // [1,3,6] // [8] // []
純函式的好處
- 因為純函式每次都能夠得到相同的結果,所以可以把結果快取起來
-
在lodash中有記憶函式,可以快取結果
const require('lodash') function getArea(r){ console.log(r) return Math.PI*r*r } let getAreaWithMemory=__.memoize(getArea) console.log(getAreaWithMemory(4)) console.log(getAreaWithMemory(4)) console.log(getAreaWithMemory(4)) // 輸出: // 4 // 50.26548245743669 // 50.26548245743669 // 50.26548245743669
-
從結果可以看出,只有第一次輸出了4,其它再次都是直接輸出的快取結果
-