編寫可維護的JavaScript,編寫javascript

軟件生命周期中80%的成本都消耗在了維護上;而且?guī)缀跛械木S護者都不是代碼的直接開發(fā)人。愛掏網 - it200.com如何讓自己寫的代碼讓別人閱讀起來更高效?當然是寫代碼的時候注入一些規(guī)范。愛掏網 - it200.com那么在Javascript中有哪些編程風格值得我們去注重呢?這篇文章將總結《編寫可維護的JavaScript》里面的觀點。愛掏網 - it200.com

縮進風格


07d0c4196f3df8491228e2c4753b33cf9e3013aa

上圖是Stack Overflow的調查,可見,大部分的Programmer都喜歡用tab進行縮進。愛掏網 - it200.com每行縮進由4個空格組成。愛掏網 - it200.com

語句結尾

建議不要省略分號。愛掏網 - it200.com很多人喜歡寫js代碼很依賴于自動分號插入,也就是語句后面不加分號。愛掏網 - it200.com但是這是大多數(shù)的情況,像return這樣的語句是會出錯的。愛掏網 - it200.com類似的還有其他一些語法,這里就不細說自動分號插入機制了,感興趣的童鞋可以前往JavaScript ASI 機制詳解。愛掏網 - it200.com

行的長度

這個之前在另外一篇博客中有介紹過,為了保證在小屏筆記本和大屏幕上看到的代碼是一致的,通常建議每一行代碼不要超過80列。愛掏網 - it200.com


換行

代碼長度超過80列,換行也是有講究的。愛掏網 - it200.com建議換行的代碼增加兩個縮進長度。愛掏網 - it200.com例如:


callFunction(element1, element2, element3, element4,
        element5);

空行

整個函數(shù)代碼沒有空行地緊湊在一起會給閱讀代碼的人一定的視覺疲勞。愛掏網 - it200.com也讓人厭倦,起碼我看到這樣的代碼就不想再看下去了。愛掏網 - it200.com對于空行地建議:

  • 在方法之間
  • 在方法中的局部變量和第一條語句之間
  • 在注釋之前
  • 在方法內的邏輯片段之間插入空行,提高可讀性

命名

命名是我覺得規(guī)范中最難的點,怎么讓變量或者函數(shù)名稱還有意境。愛掏網 - it200.com結合不同的場景,設置不一樣的名稱。愛掏網 - it200.com讓維護代碼的人像看小說一般地閱讀代碼,就說明命名是成功的!除了變量含義之外,其他的一些規(guī)范比如:

  • 駝峰寫法
  • 變量用名詞
  • 函數(shù)用動詞+名詞
  • 對象私有屬性或方法前面加_
  • 常量用全部大寫字母且分割單詞用下劃線
  • 構造函數(shù)首字母大寫,且以非動詞開頭

注釋

單行注釋

  • 獨占一行,用來解釋下一行代碼

if (condition) {
    
    // 如果代碼執(zhí)行到這里,代表通過了condition的校驗
    next();
}

注意注釋之前要加空行、注釋也要縮進。愛掏網 - it200.com

  • 與代碼同一行,用來解釋之前的代碼

var result = something + somethingElse;    // somethingElse will never be null

注意注釋與代碼直接至少添加一個縮進。愛掏網 - it200.com

  • 多行,用來注釋掉一個代碼塊

// if (condition) {
//     doSomething();
//     doSomethingElse();
// }

注釋一個代碼塊時是在連續(xù)多行使用單行注釋唯一可以接受的情況。愛掏網 - it200.com但是最好別這樣使用。愛掏網 - it200.com

多行注釋


if (condition) {

    /*
     * 如果代碼執(zhí)行到這里
     * 說明balabala
     */
     doSomething();
}

要注意縮進、換行、空格、空行。愛掏網 - it200.com

使用注釋聲明

注釋說明,主要用來做記號。愛掏網 - it200.com主要有以下幾種:

  • TODO 說明代碼還未完成,說明接下來要做的事情。愛掏網 - it200.com
  • HACK 表明代碼實現(xiàn)走了一個捷徑。愛掏網 - it200.com應當包含為何使用hack的原因。愛掏網 - it200.com同時也表明也許會有更好的解決辦法。愛掏網 - it200.com
  • FIXME 說明代碼存在bug,應當盡快修復。愛掏網 - it200.com
  • REVIEW 說明代碼任何可能的改動都需要評審。愛掏網 - it200.com

變量、函數(shù)和運算符

  • 變量聲明 變量聲明習慣一般有兩種:一種是“就近”原則,放在離使用最近的地方;第二種就是放在最上面,作為函數(shù)內的第一條語句。愛掏網 - it200.com個人推薦后者,這跟JavaScript引擎解析代碼的習慣是一致的。愛掏網 - it200.com

  • 函數(shù)聲明 函數(shù)聲明也會被JS引擎提前,建議在函數(shù)調用之前聲明函數(shù)。愛掏網 - it200.com另外,推薦函數(shù)內部的局部函數(shù)應當緊接著變量聲明之后聲明。愛掏網 - it200.com

  • 立即調用的函數(shù) 立即執(zhí)行函數(shù),在開發(fā)中肯定會經常使用。愛掏網 - it200.com好的寫法是:


var value = (function() {

    // 函數(shù)體
    return {
        message: 'Hi'
    };
}());

清晰明了地的讓人知道這是一個立即執(zhí)行函數(shù)。愛掏網 - it200.com

  • 嚴格模式 ES5引入了嚴格模式,通過這種方式解析執(zhí)行js代碼,來達到減少錯誤的目的。愛掏網 - it200.com代碼要以strict mode去解析也很簡單,只要將use strict放到js代碼中即可。愛掏網 - it200.com當js解析器看到這樣一條沒有賦給變量的字符串之后,就會以嚴格模式去解析代碼。愛掏網 - it200.com一個原則:盡量少地影響到更多代碼!什么意思呢?use strict可以放到任何位置,全局或者函數(shù)局部都可以。愛掏網 - it200.com


// bad
"use strict";
function doSomething() {
    // 代碼

}

// good
function doSomething() {
    "use strict";
    // 代碼

}

如果有多個函數(shù)要使用嚴格模式,就用立即函數(shù)限制起來,避免影響到全局。愛掏網 - it200.com

(function() {
    "use strict";
    function doSomething() {
        // 代碼
    }
    function doSomethingElse() {
        // 代碼
    }
})();

  • 相等 使用===、!==代替==、!=,避免類型轉換。愛掏網 - it200.com類型轉換的相關內容這里就不說了,自行了解。愛掏網 - it200.com

UI層的松耦合

松耦合的原則:修改一個組件時盡可能不需要修改其他組件代碼。愛掏網 - it200.com

  • 將JavaScript從CSS中抽離 避免使用CSS表達式

  • 將CSS從JavaScript中抽離 避免直接修改dom的樣式,通過類名去實現(xiàn)想要的效果。愛掏網 - it200.com


// bad
element.style.cssText = "color: red; left: 10px";

// good
.reveal {
    color: red;
    left: 10px;
}

element.className += " reveal";

  • 將JavaScript從HTML中抽離 避免直接在HTML寫事件處理程序和邏輯代碼

事件處理

兩個規(guī)則:

  • 隔離程序邏輯 將應用邏輯從所有事件處理程序中抽離出來是最佳實踐,舉個例子:

// bad
function handleClick(event) {
    var popup = document.getElementById("popup");
    popup.style.left = event.clientX + "px";
    popup.style.top = event.clientY + "px";
    popup.className = "reveal";
}

// good
function handleClick(event) {
    showPopup(event);
}

function showPopup(event) {
    popup.style.left = event.clientX + "px";
    popup.style.top = event.clientY + "px";
    popup.className = "reveal";
}

  • 不要濫用事件對象 將事件對象event一直傳遞下去是個很爛的實踐。愛掏網 - it200.com別人并不知道你具體使用到事件對象的什么屬性或者方法。愛掏網 - it200.com繼續(xù)用上面的例子:

// bad
function handleClick(event) {
    showPopup(event);
}

function showPopup(event) {
    popup.style.left = event.clientX + "px";
    popup.style.top = event.clientY + "px";
    popup.className = "reveal";
}

// good
function handleClick(event) {
    showPopup(event.clientX, event.clientY);
}

function showPopup(x, y) {
    popup.style.left = x + "px";
    popup.style.top = y + "px";
    popup.className = "reveal";
}

vue的規(guī)范建議可以前往vue最佳實踐,一起討論學習吧!


原文發(fā)布時間為:2024年06月12日
原文作者:Jouryjc
本文來源:?掘金?如需轉載請聯(lián)系原作者

聲明:所有內容來自互聯(lián)網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: jizz中国视频| 亚洲综合国产成人丁香五月激情 | 亚洲国产老鸭窝一区二区三区| aⅴ一区二区三区无卡无码| 精品久久久中文字幕人妻| 日批视频在线免费观看| 国产亚洲精品bt天堂精选| 久久国产乱子伦精品在| 青青国产成人久久激情91麻豆| 日韩一级电影在线观看| 国产农村妇女毛片精品久久| 久久婷婷五月综合97色一本一本| 高潮videossex潮喷另类| 日韩一区二区三区电影| 国产乱人伦av在线a| 中文字幕日韩精品一区二区三区| 美女视频黄频a免费| 成人午夜精品无码区久久| 免费高清小黄站在线观看| jizz.日本| 正在播放露脸一区| 国产精品欧美久久久久无广告| 亚洲人成在线影院| 麻豆第一区MV免费观看网站| 日日噜噜夜夜狠狠久久aⅴ| 向日葵app在线观看免费下载视频| 一级黄色片免费| 激情综合网五月| 国产精品亚洲片在线观看不卡| 九色视频在线观看| 色妞www精品一级视频| 广西美女一级毛片| 亚洲第一二三四区| 日本免费www| 日批视频在线看| 免费av一区二区三区| 4408私人影院| 日本精品ova樱花动漫| 午夜毛片免费看| 92国产福利久久青青草原| 最近在线2018视频免费观看|