码迷,mamicode.com
首页 > 其他好文 > 详细

解决全局变量污染问题

时间:2016-03-22 00:44:35      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

      什么是污染-------->全局变量就是污染。常用的解决污染的几种方式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

 

解决全局变量污染问题

标签:

原文地址:http://www.cnblogs.com/Snow-G/p/5304304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!