zoukankan      html  css  js  c++  java
  • 如何减少全局变量污染?

    如何减少全局变量污染?

    尽量避免全局变量是个老生常谈的问题了,但确实非常重要,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全局变量

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

  • 相关阅读:
    Ubuntu下的OpenResty 安装
    你真的理解devDependencies和dependencies区别吗?
    "No user exists for uid 501"
    Mongo的备份和恢复(mongodump 和mongorestore )
    mongodb最大连接数、最大连接数修改
    ssh 断开解决办法
    Know How To Use Check Box Mapping Of Other Values Property In Oracle Forms
    Date Picker Calendar For Oracle Forms 6i
    Freebie: Date Picker Calendar Demo Form For Oracle Forms 6i
    Creating Excel File in Oracle Forms
  • 原文地址:https://www.cnblogs.com/hjvsdr/p/7485592.html
Copyright © 2011-2022 走看看