一、HTML規(guī)范:
Javascript代碼應該盡量放在.js格式的文件中,需要調用的時候在頁面中以的形式包含進來。Javascript代碼若不是該頁面專用的,則應盡量避免在頁面中直接編寫Javascript代碼。
3,全局命名空間無法與IIFE:
總是將代碼包裹成一個IIFE(Immediately-Invoked Function Expression),用以創(chuàng)建獨立隔絕的定義域。這一舉措可防止全局命名空間被污染。
IIFE 還可確保代碼不會輕易被其它全局命名空間里的代碼所修改(第三方庫,window 引用,被覆蓋的未定義的關鍵字等等)。
// 不推薦
varx=10,
y=100;
console.log(window.x+' '+window.y);
// 推薦
(function(log, w, undefined){
varx=10,
y=100;
console.log((w.x === undefined) +' '+ (w.y === undefined));
}(window.console.log,window));
無論何時,想要創(chuàng)建一個新的封閉的定義域,那就用IIFE。它不僅避免了干擾,也使得內(nèi)存在執(zhí)行完后立即釋放。
所有腳本文件建議都從IIFE 開始。
立即執(zhí)行的函數(shù)表達式的執(zhí)行括號應該寫在外包括號內(nèi)。雖然寫在內(nèi)還是寫在外都是有效的,但寫在內(nèi)使得整個表達式看起來更像一個整體,因此推薦這么做。
//不推薦
(function(){})();
//推薦
(function(){}());
如果想引用全局變量或者是外層IIFE 的變量,可以通過下列方式傳參:
(function($, w, d){
$(function() {
w.alert(d.querySelectorAll('div').length);
});
}(jQuery, window, document));
4,引號:
統(tǒng)一使用單引號(‘’),不使用雙引號(“”)。這在創(chuàng)建 HTML 字符串非常有好處:
varmsg='This is some HTML
'
;
5,變量生命:
總是使用var 來聲明變量。如不指定 var,變量將被隱式地聲明為全局變量,這將對變量難以控制。如果沒有聲明,變量處于什么定義域就變得不清(可以是在 Document 或 Window 中,也可以很容易地進入本地定義域)。所以,請總是使用 var 來聲明變量。駝峰命名法。
//不推薦
x=10;
y=100;
//推薦
varx=10,
y=100;
6,數(shù)組和對象字面量:
用數(shù)組和對象字面量來代替數(shù)組和對象構造器。數(shù)組構造器很容易讓人在它的參數(shù)上犯錯。
不推薦
vara1=newArray(x1, x2, x3);
vara2=newArray(x1, x2);
vara3=newArray(x1);
vara4=newArray();
正因如此,如果將代碼傳參從兩個變?yōu)橐粋€,那數(shù)組很有可能發(fā)生意料不到的長度變化。為避免此類怪異狀況,請總是采用更多可讀的數(shù)組字面量。
//推薦
vara= [x1, x2, x3];
vara2= [x1, x2];
vara3= [x1];
vara4= [];
對象構造器不會有類似的問題,但是為了可讀性和統(tǒng)一性,我們應該使用對象字面量。
//不推薦
varo=newObject();
varo2=newObject();
o2.a=0;
o2.b=1;
o2.c=2;
o2['strange key'] =3;
//推薦
varo= {};
varo2= {
a:0,
b:1,
c:2,
'strange key':3
};
7,函數(shù)聲明:
函數(shù)應在調用前進行聲明,內(nèi)部函數(shù)應在var 聲明內(nèi)部變量的語句之后聲明,可以清晰地表明內(nèi)部變量和內(nèi)部函數(shù)的作用域。
此外,函數(shù)名緊接左括號'('之間,而右括號')'和后面的'{'之間要有個空格,以清楚地顯示函數(shù)名以其參數(shù)部分,和函數(shù)體的開始。若函數(shù)為匿名 / 無名函數(shù),則 function 關鍵字和左括號'('之間要留空格,否則可能誤認為該函數(shù)的函數(shù)名為 function。
varinnerA=1;
functionoutF() {
varinnerA=2;
function_inf() {
alert(‘valueA=’+innerA);
}
_inF();
}
outF();
_inF();
8,語句塊內(nèi)的函數(shù)聲明:
切勿在語句塊內(nèi)聲明函數(shù),在ECMAScript 5 的嚴格模式下,這是不合法的。函數(shù)聲明應該在定義域的頂層。但在語句塊內(nèi)可將函數(shù)申明轉化為函數(shù)表達式賦值給變量。
不推薦
if(x) {
functionfoo() {}
}
推薦
if(x) {
varfoo=function() {};
}
9,流程控制:
if、while、for、do語句的執(zhí)行體總是用"{"和"}"括起來,即使在其結構體內(nèi)只有一條語句
if(s==100) {
alert('shit!');
}
不要使用switch。switch 在所有的編程語言中都是個非常錯誤的難以控制的語句,建議用 if else 來替換它。
10,操作符:
(1)三元條件判斷(if 的快捷方法)
用三元操作符分配或返回語句。在比較簡單的情況下使用,避免在復雜的情況下使用。沒人愿意用10 行三元操作符把自己的腦子繞暈。
不推薦
if(x ===10) {
return'valid';
}else{
return'invalid';
}
推薦
returnx ===10?'valid':'invalid';
11,注釋:
(1)文件注釋
文件注釋要標明作者、文件版本、創(chuàng)建/修改時間、重大版本修改記錄
函數(shù)描述
文件版本、創(chuàng)建或者修改時間、功能、作者
/**
* @file Image.js
* @description 功能詳細描述
*/
2函數(shù)或者類等都要添加頭描述
/**
* 簡述
*
* 功能詳細描述
*
* @param? arg1 參數(shù)1
* @param? arg2 參數(shù)2,默認為0
* @return? 看xxx是否成功
*/
function fooFunction (arg1, arg2) {
}
(2)操作注釋
單行注釋,寫在代碼上面
多行注釋
/*
* 注釋操作說明
*/
for( var i = 0; i < obj.lenght; i++) {
}