匿名函數
要避免全局變量泛濫, 可以考慮使用匿名函數, 把不需要在外部訪問的變量或者函數限制在一個比較小的范圍內。
例如以下代碼:
<script>
function func1(){
var list = ["a", "b", "c"];
for(var i = 0; i < list.length; i++){
//..
};
}
func1(); // 自動運行
</script>
這段代碼的作用是在頁面加載的時候自動執行某些操作, 並不需要被外部調用, 但是它執行過後卻留下了一個全局的函數。
像這種情況, 非常有必要使用匿名函數:
<script>
(function func1(){
var list = ["a", "b", "c"];
for(var i = 0; i < list.length; i++){
//..
};
})(); // 自動運行
</script>
匿名函數的格式:
(function(){
// 代碼塊
})();
如果要帶參數的話:
(function(arg1, arg2, argN){
//..
})(arg1, arg2, argN);
命名空間
還有另外一個方法可以減少全局變量, 那就是命名空間, 在JS中可以用"對象-屬性"來模擬命名空間;
window.com = {}
window.com.bytter = {}
window.com.bytter.hello = function(){
alert("hello");
}
如果你要給某個已經存在的頁面增加功能, 可能要增加十多個函數, 而那個頁面已經存在大量的全局變量和函數, 甚至還有函數跟你新增的函數同名, 怎麼辦?
命名空間是比較好的選擇, 你可以創建一個命名空間, 把你的新函數都放在那個命名空間之下, 例如:
<button type="button" onclick="pg.check.userAcc()">檢查用戶名</button>
<button type="button" onclick="pg.check.userAcc()">檢查帳號</button>
<script>
window.pg = {}
window.pg.check = {
// 檢查用戶名
userName: function(){
//..
},
// 檢查帳號
userAcc: function(){
//..
}
};
</script>
互不干擾
結合上述的匿名函數和命名空間的使用, 可以把一個頁面中自己維護的代碼與其它的代碼分隔開來, 將與外部代碼的耦合降低到最小。
<script>
// 頁面命名空間
window.pg = {}
// 檢查用戶信息
// 作者:張三
// 最後更新: 2012.12.31
(function(){
// 私有變量
var a, b, c;
// 檢查用戶信息的相關方法
window.pg.check = {
// 檢查用戶名
userName: function(){
//..
},
// 檢查帳號
userAcc: function(){
//..
}
};
})(); // end 張三的代碼
// xxx功能
// 作者:李四
// 最後更新: 2012.1.1
(function(){
window.pg.xxx = {
//..
}
})(); // end 李四的代碼
</script>
變量聲明
變量必須在使用前用var進行聲明;
變量的聲明應該放在代碼塊或者函數的頭部;
可在一行內聲明多個變量, 但要考慮美觀易讀;
// 銀行名稱, 銀行帳號
var type, acc;
// 銀行名稱, 銀行帳號
var type = "中國銀行", acc = "xxxxxx";
var type = "中國銀行", // 銀行名稱
acc = "xxxxxx"; // 銀行帳號
盡量使用易於理解的變量名,如:
var bankType = "中國銀行",
bankAccount = "xxxxxx";
命名
普通變量名和函數名采用"小駝峰式命名法", 如:firstName、lastName
作為構造函數的函數采用"大駝峰式命名法", 如:
var Person = function(){
//..
}
var me = new Person();
常量用大寫和下劃線表示,如:
var ROOT_PATH = "/v10/";
分號
每條語句必須使用分號結尾(特別是需要壓縮的js,省略分號常常會導致壓縮失敗);
大括號
if語句、函數定義、try語句等帶大括號的結構, 左大括號應緊跟前面的部分:
// good
var Person = function(){
//..
}
// bad
var Person = function()
{
//..
}
使用復合語句時不要省略大括號{}
// good
for(var i = 0; i < ary.length; i++){
list.push(ary[i]);
}
// bad
for(var i = 0; i < ary.length; i++)
list.push(ary[i]);
以提高代碼可讀性為前提,允許例外:
if(!data) return;
if(row) list.push(row);
空格
數值操作符(如, +/-/*/% 等)、比較符(大於、小於、等於)兩邊留空格;
逗號、冒號、分號後要留一個空格(如果後面還有內容的話);
行尾不要有空格;
點號前後不要出現空格;
函數名末尾和左括號之間不要出現空格;
字符串
表示字符串用單引號或雙引號均可, 建議統一使用雙引號,
但表示html標簽時一律使用單引號, 如:
var html = '<div class="msg" ></div>';
數組
使用簡便的方式定義數組:
// good
var list = [1, 2, 3];
// bad
var list = new Array();
list[0] = 1;
list[1] = 2;
list[2] = 3;