養成良好的編程習慣

全局變量安全

在js代碼不一樣的做用域中,均可以訪問到全局變量,這就下降了代碼的安全性,因此應儘可能減小全局變量的使用。函數

在js中全局變量的聲明方式有不少種,能夠用var,這是最標準的生命方式,可是若是出現下面這種寫法,執行結果也不會出錯:ui

myname='john'; console.log(myname); //john

這種書寫方式至關於:spa

window.myname='john';

即:給全局對象(window)定義了一個屬性,注意,myname是window的一個屬性,也就是說經過語句:code

delete myname;

能夠刪除掉這個值,即regexp

console.log(myname); // undefined

可是,一個變量是沒有辦法經過delete方法刪除的。對象

須要注意的是,若是一個變量沒有通過定義就進行運算符運算,則也至關於給全局對象添加了一個屬性。即:作用域

function fn(){ a="123"; } fn(); console.log(a); //123 delete(a); console.log(a); //error:a is not defined

因此,咱們在編寫代碼時,應儘量減小全局變量的使用,而且按照嚴格的定義規範定義變量。字符串

for循環string

在for循環中咱們總會忽略掉一些細微的問題,這在程序的運行結果上不會產生錯誤的結果,可是會大大下降代碼的執行速度,這種問題在代碼量十分龐大的程序中表現的十分明顯,看下面這段代碼:

for(var i=0;i<arr.length;i++){}

這段代碼在執行的過程當中,每次判斷條件是否成立時,都要從新獲取一下arr的長度,形成了很沒必要要的時間浪費,因此應該採用下面這種寫法:

for(var i=0,max=arr.length;i<max;i++){}

這樣,再循環過程當中就只獲取了一次arr的長度,大大減小時間成本。

避免隱式類型轉換,進行比較值和表達式類型時用 === 或 !==

減小eval()的使用

使用eval會使被執行的代碼被篡改,在setInterval()和setTimeout()中若將函數寫成字符串形式會產生和eval()相同的效果,因此要儘可能寫成函數名。

eval()還有一個弊端:eval()會干擾做用域鏈,能夠訪問和修改它外部做用域中的變量,若是使用Function或new Function(這二者是相同的),他們只會看到全局做用域,能夠避免本地變量污染

其餘書寫規範,好比空格、縮進、變量命名採用駝峯命名法等再也不贅述

相關文章
相關標籤/搜索