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