Javascript編程思想:純函數

什麼是純函數?

1. 惟一結果

let xs = [1,2,3,4,5]
// 純函數
xs.slice(0,3) //[1,2,3]
xs.slice(0,3) //[1,2,3]
xs.slice(0,3) //[1,2,3]
// 不純函數
xs.splice(0,3) //[1,2,3]
xs.splice(0,3) //[4,5]
xs.splice(0,3) //[]

將一個函數反覆執行,其中的值已經被改變了,從而影響後面的函數操做。一個純函數是不管什麼輸入,都只對應輸出一個惟一值。javascript

2. 不接受外部狀態

var min = 21;

// 不純函數
var ckeck = function(age){
    return age >= min;
}

// 純函數
var check = function(age){
    var min = 21;
    return age >= min;
}

3. 更清晰的表達

一個優秀的純函數應該具備可移植性/自文檔化,即經過輸入內容,就能夠看出函數的意圖。java

// 不純的
var signUp = function(attrs){
    一些反作用操做
}
// 純的
var signUp = function(Db, Email, attrs){
    return function(){
        ...一些反作用操做
    }
}

優勢:沒有反作用

反作用指,在進行操做的時候,更改了原有數據的形態,從而影響了數據的純潔性,對於此類數據應該放置在return裏面。數據庫

反作用 緩存

  1. 更改文件系統
  2. 往數據庫插入記錄
  3. 發送一個 http 請求
  4. 打印/log
  5. DOM 查詢

優勢:可緩存性

採用memoize技術能夠進行緩存。函數

var square = memoize(function(x){
    return x*x
})

square(4) //16
square(4) //從緩存中讀取結果16
相關文章
相關標籤/搜索