• 如何减少全局变量污染?


    如何减少全局变量污染?

    尽量避免全局变量是个老生常谈的问题了,但确实非常重要,JS可以随意定义全局变量,不幸的是,全局变量会削弱程序的灵活性,随意使用全局变量,也许会因为命名冲突而导致不可预知的问题,所以应该避免。

    全局变量的三种定义方式:

    1. 在任何函数外部var声明一个变量;
    2. 在window对象中声明一个变量;
    3. 在函数内部不先var声明变量后直接使用变量(隐式全局变量)

    一、使用唯一全局变量

    这个方法是在全局声明一个对象字面量,作为我们的全局变量容器,这样全局就只出现一个全局变量:

    var myApp = {};

    此时,变量myApp就成了我们的变量容器了,所有的全局变量都可以保存在这里:

     1 myApp.students = {
     2     name:"小明" 3     age:18
     4 };
     5 
     6 myApp.teachers = {
     7     A: {
     8         姓名:"李老师" 9         gender:"男"
    10     },
    11     B: {
    12         姓名:"朱老师"13         gender:"女"
    14     }
    15 };

    只要把多个全局变量都整理在同一个命名空间下,就能显著降低与其他应用程序、组件或类库之间产生不可预知的相互影响的可能性,也使其可读性更高。

    二、使用闭包

    闭包的概念:一个函数嵌套有内部函数,该内部函数可以访问外层函数的变量,且该外部函数的return为内部函数,这就被称为闭包。

    不懂闭包的童鞋请参考阮一峰老师的文章:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

    使用闭包,也能显著减少全局变量污染,就是创建一个函数,该函数包括,私有变量和一个特权对象,特权对象的内容是,利用闭包能访问到私有变量的函数,最后返回特权对象。

    //创建函数,返回一个特权对象
    var
    f3 = function() { var age = 18; return { name: "啊哈", age: age, gender: "男" } }(); //获取变量 f3.name = "啊哈";

    对于闭包,还有一个方法,就是使用匿名自执行函数,其实这货就是个如假包换的闭包,所有代码写在其中,在它内部声明的变量全部都是局部变量,一般用来写完全独立的脚本,比如jQuery,插件等。。。

    (function() {
      //我在一个匿名自执行函数中
      //some code here...
    })()

    三、0全局变量

    哈哈,这个方法直接杜绝了全局变量,那就是不在全局声明变量(包括隐式声明全局变量);

  • 相关阅读:
    调用控制台程序函数 RunProcess
    url传递中文的解决方案(备忘)
    Microsoft.SharePoint.SPException 安全性验证无效——错误解决
    Windows SharePoint Services 虚拟服务器没被配置为与 ASP.NET 2.0.50727.42 一起使用解决办法
    automation服务器不能创建对象
    InfoPath窗体事件列表说明和示例使用
    ORA01113:文件n需要介质恢复 (转载)
    DevExpress 第三方控件汉化的全部代码和使用方法 (转载)
    爱的感觉(转载)
    关于Oracle 01122,01110,01207的错误和解决(转载)
  • 原文地址:https://www.cnblogs.com/hjvsdr/p/7485592.html
Copyright © 2020-2023  润新知