避免全局污染
自己的項目,其實不太能在全局污染上踩坑。
大部分因為全局污染造成的問題,都出現(xiàn)在老項目下,這些老項目被太多人維護,同時又缺少模塊化方案,如果開發(fā)人員的水平和意識都不是非常高,就會定義很多全局下的屬性和方法。
這時候如果自己去維護老項目沒注意,覆蓋了一個全局項目,就可能出現(xiàn)一個驚天大 Bug。
所以在全局環(huán)境下,非必要情況,不要直接聲明變量和聲明函數(shù),他們會造成全局污染。
避免這個問題最常用的方法就是把自己的邏輯用一個函數(shù)包裹:
(function() {
// 業(yè)務(wù)邏輯
var a = 1;
var b = 2;
var c = 3;
function fn() {
console.log(a, b, c);
}
fn(); // 輸出:1 2 3
})();
fn(); // 拋出異常:fn is not defined
函數(shù)擁有自己的作用域,這樣就避免了全局污染的問題。
如果有時候需要通過全局做跳板,把一些內(nèi)容臨時的掛載全局下,可以起一些不太容易重名的名字:
window.__$some_global_var = 1;
通過 _
和 $
組合一些前后綴,可以大大降低覆蓋他們或者被覆蓋的可能性。
也可以增加一個命名空間,也就給全局下增加一個對象,所有自己要用的或者某個業(yè)務(wù)相關(guān)的全局?jǐn)?shù)據(jù)放在這個對象下:
window.__some_logic_need = {
__$some_global_var: 1,
__$some_global_fn: function() {},
};