定义全局变量有 3 种方式:

  • 在任何函数体外直接使用 var 语句声明。

    var f = 'value1';

  • 直接添加属性到全局对象上。在 Web 浏览器中,全局作用域对象为 window。

    window.f = 'value';

  • 直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量。

    f = 'value' ;

全局变量在全局作用域内都是可见的,因此具有污染性。大量使用全局变量会降低程序的可靠性,用户应该避免使用全局变量。

减少使用全局变量有两种方式,示例如下:

示例1

在脚本中创建一个全局变量,作为当前应用的唯一接口,然后通过对象直接量的形式包含所有应用程序变量。

var MyAPP = {}; //定义 APP 访问接口
MyAPP.name = { //定义APP配置变量
"id" : "应用程序的ID编号"
};
MyAPP.work = {
num : 123, //APP计数器等内部属性
sub : { name : "sub_id"}, //APP应用分支
doing : function(){ //具体方法
//执行代码
}
};

把应用程序的所有变量都追加在该唯一名称空间下,降低与其他应用程序相互冲突的概率,应用程序也会变得更容易阅读。

示例2

使用函数体封装应用程序,这是最常用的一种方法。

(function(window){
var MyAPP = {}; //定义 APP 访问接口
MyAPP.name = { //定义APP配置变量
"id" : "应用程序的ID编号"
};
MyAPP.work = {
num : 123, //APP计数器等内部属性
sub : { name : "sub_id"}, //APP 应用分支
doing : function(){ //具体方法
//执行代码
}
};
window.MyAPP; //对外开放应用程序接口
})(window)

在 JavaScript外界是无法访问内部数据的,因此使用函数体封装应用程序是最佳实践。

JavaScript 环境污染的更多相关文章

  1. Javascript学习记录——原生JS实现旋转木马特效

    昨天学习到了JS特效部分,然后老师讲了旋转木马特效的实现,如上图.不过只是讲了通过点击箭头实现图片的切换,对于点击图片本身以及二者联动却是没有讲解. 本着一颗追求完美的心,今天花费了一个中午终于将整个 ...

  2. javascript世界一等公民—函数

    简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...

  3. Javascript学习之函数(function)

    在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...

  4. 实现javascript下的模块组织

    前面的话 java有类文件.Python有import关键词.Ruby有require关键词.C#有using关键词.PHP有include和require.CSS有@import关键词,但是对ES5 ...

  5. JavaScript日历(es5版本)

    近期在知乎上看到这么一个帖子,题主说自己JavaScript都学完了,结果老师留的作业还是不会写,就是写一个日历的插件,结果楼下一堆大牛出现了,百度的阿里的纷纷站出来发表自己的看法,有人认为简单,有人 ...

  6. JavaScript世界的一等公民—— 函数

    简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...

  7. JavaScript世界的一等公民 - 函数

    简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...

  8. javascript语言中的一等公民-函数

    简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...

  9. 5.Javascript闭包得实现原理和作用

    闭包的实现原理和作用 1.闭包的概念:指有权访问另一个函数作用域中的变量的函数,一般情况就是在一个函数中包含另一个函数. 2.闭包的作用:访问函数内部变量.保持函数在环境中一直存在,不会被垃圾回收机制 ...

随机推荐

  1. redis在Windows上启动报错

    The Windows version of Redis allocates a memory mapped heap for sharing with the forked process used ...

  2. string类的具体实现

    bigThree,注意拷贝构造函数的写法. #ifndef __MYSTRING__ #define __MYSTRING__ class String { public: String(); Str ...

  3. 基于Struts2+Hibernate开发小区物业管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...

  4. Java自学-集合框架 ArrayList和LinkedList的区别

    ArrayList和LinkedList的区别 步骤 1 : ArrayList和LinkedList的区别 ArrayList ,插入,删除数据慢 LinkedList, 插入,删除数据快 Arra ...

  5. ha-wordy-Write-up

    信息收集 下载地址:点我 bilibili:点我 ➜ ~ nmap -sn 192.168.116.1/24 Starting Nmap 7.80 ( https://nmap.org ) at 20 ...

  6. unique() 函数详解

    简介 顾名思义,unique,独一无二的.这个函数可以对容器中的元素进行"去重". 但是需要注意,这里的"去重",并没有把重复的元素删除,只是不重复的元素放到了 ...

  7. 13 JavaScript Array对象&Boolean对象&Math对象&RegExp对象

    万物皆对象,数组是对象,数组可以存储元素,函数,数组等对象 创建数组的三个方式: 常规方式:var myCars = new Array(); 简介方式:var myCars = new Arrray ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:强调

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Caffe2 手写字符识别(MNIST - Create a CNN from Scratch)[8]

    本教程创建一个小的神经网络用于手写字符的识别.我们使用MNIST数据集进行训练和测试.这个数据集的训练集包含60000张来自500个人的手写字符的图像,测试集包含10000张独立于训练集的测试图像.你 ...

  10. AT2827 最长上升子序列LIS(nlogn的DP优化)

      题意翻译 给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列. 输出这类单调上升序列的最大长度. 数据范围:1<=n<=10 ...