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全局变量

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

  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/hjvsdr/p/7485592.html
Copyright © 2011-2022 走看看