什么是污染-------->全局變量就是污染。常用的解決污染的幾種方式a.函數b.對象c.命名空間d.立即函數
函數和對象就是我們把變量放到函數或者對象里,成為局部變量,通過訪問函數內的變量來獲取想要得到的內容,這個就不詳細解釋了。
這里引入一個命名空間的例子:這樣進行訪問會很大程度降低污染問題了。
/*頂級 一級*/
var demo={};//根部
/*二級*/
demo.web={
sum:10,
tab:function(){}
};
demo.finance = {
sum:20,
tab:function(){}
};
/*三級*/
demo.web.default = {
sum:30
};
demo.web.product = {
sum:40
};
demo.web.account = {};
/*如何使用*/
console.log(demo.web.sum);
console.log(demo.finance.sum);
console.log(demo.web.default.sum);
console.log(demo.web.product.sum);
這里在說一下立即函數:也就是將定義和調用合二為一,不需要調用也能執行,立即函數的后面必須加分號,否則后面的立即函數會出錯。
(function(){
var sum = 1;
console.log(sum); //1
})();
(function(){
var sum = 2;
console.log(sum); //2
})();
console.log(sum); //sum is not defined
不過要訪問立即函數中的某些變量,是訪問不到的,通常通過以下三種方式訪問立即函數中的變量。第一種window,第二種全局變量形式,第三種return形式。
window方式:
(function (w) {
var sum = 10;
w.sum = sum;
})(window);
console.log(sum); //10此時sum為全局變量了
如果要訪問多個立即函數中的值,那么上面的方法就不行了,會產生大量污染
以下解決方案:json
(function (w) {
var sum=10;
json = {
sum : sum,
fn:function(){
console.log("fn");
}
}
w.$ = json;
})(window);
$.fn(); //fn
console.log($.sum); //10