解決全局變量污染問題


      什么是污染-------->全局變量就是污染。常用的解決污染的幾種方式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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM