解决全局变量污染问题

什么是污染-------->全局变量就是污染。常用的解决污染的几种方式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
时间: 2025-01-31 07:50:20

解决全局变量污染问题的相关文章

防止js全局变量污染方法总结

javaScript 可以随意定义保存所有应用资源的全局变量.但全局变量可以削弱程序灵活性,增大了模块之间的耦合性.在多人协作时,如果定义过多的全局变量 有可能造成全局变量冲突,也就是全局变量污染问题,以下是两种解决办法 一.定义全局变量命名空间 只创建一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下 var MY={}; my.name={ big_name:"zhangsan", small_name:"lisi" }; my.work

[转] 防止js全局变量污染方法总结

javaScript 可以随意定义保存所有应用资源的全局变量.但全局变量可以削弱程序灵活性,增大了模块之间的耦合性.在多人协作时,如果定义过多的全局变量 有可能造成全局变量冲突,也就是全局变量污染问题,以下是两种解决办法 一.定义全局变量命名空间只创建一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下 var MY={};my.name={big_name:"zhangsan",small_name:"lisi"};my.work={scho

js全局变量污染问题

javaScript 可以随意定义保存所有应用资源的全局变量.但全局变量可以削弱程序灵活性,增大了模块之间的耦合性.在多人协作时,如果定义过多的全局变量 有可能造成全局变量冲突,也就是全局变量污染问题,以下是两种解决办法 一.定义全局变量命名空间 只创建一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下 var MY={}; my.name={ big_name:"zhangsan", small_name:"lisi" }; my.work

2014年Dropbox可用的Hosts文件 或 使用DNSCrypt解决DNS污染问题

一.Dropbox的可用Hosts文件 昨天Dropbox的域名突然被DNS污染,并且Dropbox域名也进了黑名单关键字,导致Dropbox客户端无法使用,不过我发现通过修改Hosts文件的方法可以让Dropbox继续正常使用,Hosts文件内容如下. 注释:我的Dropbox版本2.8.2,修改Hosts后可以通过https的方式去Dropbox网站下载最新版本.Dropbox有一些比较BT 的子域名如dl-client804.dropbox.com等等我没加到Hosts,加的话要多加100

25.函数例题-预解析 作用域 、函数变量优先级、全局变量污染(直接在全局声明 、 函数里的变量没声明)但是函数里的变量没声明造成的全局变量污染有个前提,函数要被调用)

1.  return foo()   foo 没有return值,故为undefined.   2.      a b 在函数作用域内,外界找不到   var a = b =3; b 也算用var 声明了,只不过b 是在全局隐式var 了一个b ,在函数内部找不到变量的情况下就去全局找,全局找不到报错.    语法有错误,程序一句都不会执行,执行阶段有错误,会执行没错的代码,在执行出错的地方报错.  函数或则匿名函数体内声明变量是为了避免全局变量污染 重要例题:  函数没执行,全局没找到 b报错

Javascript匿名函数的作用之一:创建临时的命名空间,防止全局变量污染

如果你写了一段js模块的代码,这段代码将用在不同的程序中(对客户端Javascript来说通常是在各种各样的网页中).假定这段代码定义了一个用以存储中间计算结果的变量,问题来了,这个变量可能会同其他代码中的全局变量发生冲突.解决的办法是将模块代码放入一个函数内部,然后立即调用这个函数.这样全局变量就变成了函数内部的局部变量: function() myModule(){ //模块代码,这个模块所用的所有变量都是局部变量,而不会污染全局命名空间 } myModule(); //立即调用这个函数 这

使用DNSCrypt解决Dropbox污染问题

 作者:半点闲 时间:2014-6-27 18:27 博客:blog.csdn.net/cg_i 邮箱:[email protected] 背景知识:防火长城(GFW) keyword:DNSCrypt DNS污染问题 Dropbox无法同步 GFW 起因:昨天Dropbox的域名突然被DNS污染,而且Dropbox域名也进了黑名单keyword,导致Dropboxclient无法使用. 凝视:我的Dropbox版本号2.8.2.实在搞不清楚没事情搞Dropbox干啥?这就是一个纯粹的云同步

变量作用域问题,全局变量污染

<script> function fun1(){ max = 5;//注意 此处max虽在函数内,但没var声明 } fun1(); //这里调用fun1()相当于在全局var了一个max变量 function fun2(){ max = 10;//此处更改了全局变量max,fun()1中的max也被更改,就是全局变量被污染.fun1()变量被污染的根源是因为他没保护好自己的变量max,如果函数内要声明被保护的变量必须加var,不可能在方法外改变方法内的变量,只能向上爬树 } fun2();

使用DNSCrypt解决DNS污染问题

前言 在开始写这篇文章之前,先要普及一个知识中国长城防火墙(英文名:Great Firewall of China)好伟大的样子,是XX专门用来对网民进行网络封锁,闭关锁国的的工具.最近一批google.com, youtube.com, facebook.com, dropbox.com等一批国外知名网站,均无法正常访问,就是拜其所赐.它所实现的主要屏蔽技术有IP封锁,关键字过滤,域名劫持与污染以及HTTPS证书过滤四种.本文主要通过dnscrypt技术反其dns劫持与污染. 先了解一下什么是