軟件生命週期中80%的成本都消耗在了維護上;並且幾乎全部的維護者都不是代碼的直接開發人。如何讓本身寫的代碼讓別人閱讀起來更高效?固然是寫代碼的時候注入一些規範。那麼在Javascript中有哪些編程風格值得咱們去注重呢?這篇文章將總結《編寫可維護的JavaScript》裏面的觀點。javascript
建議不要省略分號。不少人喜歡寫js代碼很依賴於自動分號插入,也就是語句後面不加分號。可是這是大多數的狀況,像return這樣的語句是會出錯的。相似的還有其餘一些語法,這裏就不細說自動分號插入機制了,感興趣的童鞋能夠前往JavaScript ASI 機制詳解。css
這個以前在另一篇博客中有介紹過,爲了保證在小屏筆記本和大屏幕上看到的代碼是一致的,一般建議每一行代碼不要超過80列。vue
代碼長度超過80列,換行也是有講究的。建議換行的代碼增長兩個縮進長度。例如:java
callFunction(element1, element2, element3, element4,
element5);
複製代碼
整個函數代碼沒有空行地緊湊在一塊兒會給閱讀代碼的人必定的視覺疲勞。也讓人厭倦,起碼我看到這樣的代碼就不想再看下去了。對於空行地建議:node
命名是我以爲規範中最難的點,怎麼讓變量或者函數名稱還有意境。結合不一樣的場景,設置不同的名稱。讓維護代碼的人像看小說通常地閱讀代碼,就說明命名是成功的!除了變量含義以外,其餘的一些規範好比:git
單行註釋github
if (condition) {
// 若是代碼執行到這裏,表明經過了condition的校驗
next();
}
複製代碼
注意註釋以前要加空行、註釋也要縮進。編程
var result = something + somethingElse; // somethingElse will never be null
複製代碼
注意註釋與代碼直接至少添加一個縮進。dom
// if (condition) {
// doSomething();
// doSomethingElse();
// }
複製代碼
註釋一個代碼塊時是在連續多行使用單行註釋惟一能夠接受的狀況。可是最好別這樣使用。ide
多行註釋
if (condition) {
/* * 若是代碼執行到這裏 * 說明balabala */
doSomething();
}
複製代碼
要注意縮進、換行、空格、空行。
使用註釋聲明
註釋說明,主要用來作記號。主要有如下幾種:
變量聲明 變量聲明習慣通常有兩種:一種是「就近」原則,放在離使用最近的地方;第二種就是放在最上面,做爲函數內的第一條語句。我的推薦後者,這跟JavaScript引擎解析代碼的習慣是一致的。
函數聲明 函數聲明也會被JS引擎提早,建議在函數調用以前聲明函數。另外,推薦函數內部的局部函數應當緊接着變量聲明以後聲明。
當即調用的函數 當即執行函數,在開發中確定會常用。好的寫法是:
var value = (function() {
// 函數體
return {
message: 'Hi'
};
}());
複製代碼
清晰明瞭地的讓人知道這是一個當即執行函數。
use strict
放到js代碼中便可。當js解析器看到這樣一條沒有賦給變量的字符串以後,就會以嚴格模式去解析代碼。一個原則:儘可能少地影響到更多代碼!什麼意思呢?use strict
能夠放到任何位置,全局或者函數局部均可以。// bad
"use strict";
function doSomething() {
// 代碼
}
// good
function doSomething() {
"use strict";
// 代碼
}
複製代碼
若是有多個函數要使用嚴格模式,就用當即函數限制起來,避免影響到全局。
(function() {
"use strict";
function doSomething() {
// 代碼
}
function doSomethingElse() {
// 代碼
}
})();
複製代碼
鬆耦合的原則:修改一個組件時儘量不須要修改其餘組件代碼。
將JavaScript從CSS中抽離 避免使用CSS表達式
將CSS從JavaScript中抽離 避免直接修改dom的樣式,經過類名去實現想要的效果。
// bad
element.style.cssText = "color: red; left: 10px";
// good
.reveal {
color: red;
left: 10px;
}
element.className += " reveal";
複製代碼
兩個規則:
// 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";
}
複製代碼
// 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的規範建議能夠前往vue最佳實踐,一塊兒討論學習吧!