你不知道的js——純函數及其作用(函數式編程思想)

你不知道的js——純函數及其作用(函數式編程思想)

首先關於純函數:人話是: 不依賴、不修改其作用域之外的函數 (純函數一定要有return)
寫一個簡單的純函數,例如:

function(a,b){
    return a+b;
}

在上一段代碼:

var arr = [{name:'tan'}];
function add(_arr){
    var obj = {myLoveName:'li'};
    var newArr[];
    var len = _arr.length;
    for(var i = 0;i<len;i++){
        newArr[i] = deepClone(arr[i]);//deepClone()是自寫的一個深度克隆函數,具體作用及源碼見  https://blog.csdn.net/qq_39403733/article/details/83685468
    }
    newArr.push(obj);
    return newArr;
}
var newArr = add(arr);
newArr.push({name:hello});

在這段代碼中,add()就是一個純函數。arr的值全部給了newArr,並且在外部修改newArr的值,arr並沒有收到影響。
那麼舉了這麼多例子,純函數究竟有什麼作用呢?

說作用之前,不得不提一下Bug守恆定律:一旦代碼量達到一定程度,將不可避免的包含某種未知bug,甚至當清除了這個bug的時候,又會產生新的未知bug.
在JavaScript中可以很容易地創建全局變量,這些變量在很多的函數中都能訪問修改,這也是導致發生bug的常見原因。並且難以調試
此時,純函數就能極大地降低bug出現的概率。因爲
①純函數可以很容易的進行單元測試(不需要考慮上下文,只考慮輸入輸出)
②純函數具有健壯性,改變執行次序並不會對系統造成影響,一次純函數可以並行執行。
③更好的管理狀態,是可預測性增強,降低代碼管理的難度。
此外,純函數更大的威力是在高級框架之中:組件化開發狀態共享。(例如vue/React)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章