中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript代碼重構的方法有哪些

發布時間:2022-02-08 10:10:29 來源:億速云 閱讀:107 作者:iii 欄目:開發技術

這篇文章主要介紹了JavaScript代碼重構的方法有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇JavaScript代碼重構的方法有哪些文章都會有所收獲,下面我們一起來看看吧。

1.提煉函數

在 JavaScript 開發中,我們大部分時間都在與函數打交道,所以我們希望這些函數有著良好的命名,函數體內包含的邏輯清晰明了。如果一個函數過長,不得不加上若干注釋才能讓這個函數顯得易讀一些,那這些函數就很有必要進行重構。

如果在函數中有一段代碼可以被獨立出來,那我們最好把這些代碼放進另外一個獨立的函數中。這是一種很常見的優化工作,這樣做的好處主要有以下幾點。

  • 避免出現超大函數。

  • 獨立出來的函數有助于代碼復用。

  • 獨立出來的函數更容易被覆寫。

  • 獨立出來的函數如果擁有一個良好的命名,它本身就起到了注釋的作用。

比如在一個負責取得用戶信息的函數里面,我們還需要打印跟用戶信息有關的 log ,那么打印 log 的語句就可以被封裝在一個獨立的函數里:

var getUserInfo = function(){
    ajax( 'http:// xxx.com/userInfo', function( data ){
        console.log( 'userId: ' + data.userId );
        console.log( 'userName: ' + data.userName );
        console.log( 'nickName: ' + data.nickName );
    });
};


改成:


var getUserInfo = function(){
    ajax( 'http:// xxx.com/userInfo', function( data ){
        printDetails( data );
    });
};


var printDetails = function( data ){
    console.log( 'userId: ' + data.userId );
    console.log( 'userName: ' + data.userName );
    console.log( 'nickName: ' + data.nickName );
};

2.合并重復的條件片段

如果一個函數體內有一些條件分支語句,而這些條件分支語句內部散布了一些重復的代碼,那么就有必要進行合并去重工作。假如我們有一個分頁函數 paging,該函數接收一個參數 currPage,currPage 表示即將跳轉的頁碼。在跳轉之前,為防止 currPage 傳入過小或者過大的數字,我們要手動對它的值進行修正,詳見如下偽代碼:

var paging = function( currPage ){
    if ( currPage = totalPage ){
        currPage = totalPage;
        jump( currPage );    // 跳轉
    }else{
        jump( currPage );    // 跳轉
    }
};

可以看到,負責跳轉的代碼jump( currPage )在每個條件分支內都出現了,所以完全可以把這句代碼獨立出來:

var paging = function( currPage ){
    if ( currPage = totalPage ){
        currPage = totalPage;
    }
    jump( currPage );    // 把jump函數獨立出來
};

3.把條件分支語句提煉成函數

在程序設計中,復雜的條件分支語句是導致程序難以閱讀和理解的重要原因,而且容易導致一個龐大的函數。假設現在有一個需求是編寫一個計算商品價格的getPrice函數,商品的計算只有一個規則:如果當前正處于夏季,那么全部商品將以8折出售。代碼如下:

var getPrice = function( price ){
    var date = new Date();
    if ( date.getMonth() >= 6 && date.getMonth() = 6 && date.getMonth() = 6 && date.getMonth() 30 ){
                flag = true;
                break;
            }
        }
        if ( flag === true ){
            break;
        }
    }
};

第二種做法是設置循環標記:

var func = function(){
    outerloop:
    for ( var i = 0; i < 10; i++ ){
        innerloop:
        for ( var j = 0; j < 10; j++ ){
            if ( i * j >30 ){
                break outerloop;
            }
        }
    }
};

這兩種做法無疑都讓人頭暈目眩,更簡單的做法是在需要中止循環的時候直接退出整個方法:

var func = function(){
    for ( var i = 0; i < 10; i++ ){
        for ( var j = 0; j < 10; j++ ){
            if ( i * j >30 ){
                return;
            }
        }
    }
};

當然用return直接退出方法會帶來一個問題,如果在循環之后還有一些將被執行的代碼呢?如果我們提前退出了整個方法,這些代碼就得不到被執行的機會:

var func = function(){
    for ( var i = 0; i < 10; i++ ){
        for ( var j = 0; j < 10; j++ ){
            if ( i * j >30 ){
                return;
            }
        }
    }
    console.log( i );    // 這句代碼沒有機會被執行
};

為了解決這個問題,我們可以把循環后面的代碼放到return后面,如果代碼比較多,就應該把它們提煉成一個單獨的函數:

var print = function( i ){
    console.log( i );
};


var func = function(){
    for ( var i = 0; i < 10; i++ ){
        for ( var j = 0; j < 10; j++ ){
            if ( i * j >30 ){
                return print( i );
            }
        }
    }
};


func();

關于“JavaScript代碼重構的方法有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“JavaScript代碼重構的方法有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

康保县| 东城区| 南乐县| 库伦旗| 石嘴山市| 耒阳市| 宣武区| 大田县| 息烽县| 张家川| 丹棱县| 香格里拉县| 景泰县| 福鼎市| 济阳县| 宁武县| 耿马| 玉林市| 即墨市| 天镇县| 志丹县| 江山市| 吕梁市| 河南省| 阿拉尔市| 广丰县| 蓝田县| 宝清县| 荥经县| 嘉兴市| 庄河市| 麻栗坡县| 巍山| 鄂托克旗| 项城市| 三亚市| 温泉县| 报价| 延吉市| 营口市| 循化|