关于javascript中全局变量的利与弊,以及解决全局变量污染的方法

原生js使用模块化思想解决多人合作中全局变量污染冲突问题 原生js使用模块化思想解决多人合作中全局变量冲突问题 问题引入 我们在参加软件设计大赛做多人合作项目时,负责前端部分有两个人,我们使用的是原生js+JQuery来编写代码(当时只学了这些),由于当时没有学习ES6的模块化,再加上都是一多人合作写项目,在整个项目完成下来踩了不少坑,其中最大的坑就是代码冲突,主要是全局变量污染的锅,每次合并代码都会有莫名其妙的问题。 案列 小明和小红两个各自写自己的js代码,最终合并到同一个index.html中 <!-- index.html --> &l 阅读详情

定义全局变量的方法通常有

a.


  1. var name="aaa";

  2. function test(){

  3. alert(name);

  4. }

b.


  1. name="aaa";

  2. function test(){

  3. alert(name);

  4. }

c.使用window定义全局变量


  1. window.name="aaa";

  2. function test(){

  3. alert(window.name);

  4. }

优点:可以减少变量的个数,使用方便简单。

缺点:

1、生存周期长,越多消耗内存越大。

2、不利于排查错误和调试

3、多处使用同一变量,代码可读性低。变量个数越多,产生的污染也会增大,同时其存在重复性也会增大。

解决污染的方法:

a.定义全局变量命名空间
只创建一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下


  1. var mm={};

  2. mm.name={

  3. big_name:"zhangsan",

  4. small_name:"lisi"

  5. };

  6. mm.work={

  7. school_work:"study",

  8. family_work:"we are"

  9. };

  

b . 利用匿名函数将脚本包裹起来


  1. (function(){

  2. var exp={};

  3. var name="aa";

  4. exp.method=function(){

  5. return name;

  6. };

  7. window.ex=exp;

  8. })();

  9. alert(ex.method())

以上有待详细补充。

可以使用隐藏字段

参考:

http://www.bgpy.net/news_1312.html

http://www.cnblogs.com/gooroc/p/5073400.html

转载于:https://www.cnblogs.com/qijuzi/p/6932442.html

JavaScript 陷阱:全局对象 window 的技巧 在编写 JavaScript 代码时,避免隐式全局变量的产生,避免全局命名冲突,以及减少对全局对象的依赖,都是提高代码质量和可维护性的重要因素。对象是全局作用域的一部分,如果在不同的 JavaScript 文件中使用相同的全局变量或函数名,就会产生命名冲突。为了改善这种情况,我们可以通过将依赖关系作为函数参数传递进来,或者使用模块化的方式将相关的代码封装起来。为了避免全局命名冲突,我们可以使用模块化的方式组织代码,或者将相关的变量和函数封装在命名空间中。对全局对象的依赖性增加,使得代码难以测试和重用。 阅读详情

相关推荐

前端多人协作 - 全局变量污染问题(匿名IIFE / ES6块级作用域)

前言 大型前端项目开发中,每位开发者可以定义与保存所有应用资源的全局变量,如果定义过多的全局变量很有可能造成全局变量的冲突,也就是全局变量的污染问题。全局变量过多不仅会造成各文件命名冲突,而且还会削弱程序灵活性,增加各模块之间的耦合性,将来模块之间的合并拼接将非常困难。 如图,当各模块进行耦合时全局对象只有一个, 程序员A 与 程序员C 发生了冲突,程序员B 与 程序员C 又发生了冲突,可以看到...

🏆 前端领域优质创作者 1万+

js全局变量污染

什么叫全局变量污染:就是直接给window添加属性和方法,污染全局变量的后果就是,在多人开发中,容易造成命名的冲突

LeeNingfeng的博客 781

Windows中的TLS 1.2启用方法(IIS、C#、.Net framework)

折腾几天了windows中的tls1.2启用方法!特此记录一下 开发背景: 在一个用.net framework 2.0开发的客户端程序里面嵌入功能调用第三方物联网相关接口,服务器上有一个restful接口用于接收第三方上报的数据及处理,最后再调用第三方的物联网相关接口。本机开发环境Windows 10,客户服务器是Windows Server 2008 R2。 第一次写这种物联网相关的接口调用,而且第三方提供的文档比较简单,最基本的报文示例都没。开发环境里面各种摸索一步一个坑,首先在发送HTTP请求前

dl1314ld的博客 1万+

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

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

一片天空 1167

Python CalmAn(Calcium Imaging Analysis)神经生物学工具包安装及环境配置过程

CalmAn是一个用于大规模钙成像数据分析和行为分析的Python工具箱。CaImAn实施了大规模钙成像数据分析管道中所需的一套基本方法。针对多天的运动校正、源提取、尖峰反褶积和分量配准,实现了快速且可扩展的算法。它适用于双光子和单光子荧光显微镜数据,可以在批处理和在线模式下运行;CaImAn还包含一些分析摄像机行为的例程。

Fine的优快云博客 3558

从FreeCAD到BIMBase:PlaneGCS约束求解器的移植使用指南

本文为BIMBase平台的开发者提供了一份详细的PlaneGCS几何约束求解器移植与集成指南。文章深入探讨了如何从FreeCAD中提取PlaneGCS核心代码,并将其适配到BIMBase的C++二次开发环境中,重点解决了内存管理、数据模型桥接、约束抽象以及性能调优等关键问题,旨在帮助开发者构建稳定高效的参数化设计模块。

weixin_29213525的博客 320

JS设置和读取全局变量的9种方式

JS设置并读取全局变量

qq_43017644的博客 6124

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 547

JavaScript js弹出确认消息框判断是否删除,删除前提示用户是否删除,点是删除,点否返回

<br />confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。<br />如果用户点击确定按钮,则 confirm() 返回 true。如果点击取消按钮,则 confirm() 返回 false。<br />在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入。在调用 confirm() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句。<BODY>  <a href="xxoo.asp?id=<%=rs("id")%

mingyangsun的专栏 4366

Cadence OrCAD Capture 原理图中创建差分对约束的两种常用方法

本文介绍在原理图设计阶段,添加差分对的方法。

fydar的博客 3931

姿态传感器/陀螺仪之LSM6DSLTR应用驱动程序设计

* LSM6DSLTR I2C地址(SA0=1) *//* 初始化LSM6DSLTR传感器(加速度计±2g,陀螺仪±250°/s) *//* 加速度计灵敏度 *//* 角速度值(°/s) *//* I2C句柄 *//* 陀螺仪灵敏度 *//* 加速度值(g) *//* 温度值(°C) *//* 设备地址 *//* IF_INC=1: 自动增量地址 *//* 10Hz采样率 *//* 配置I2C1引脚:PB6->SCL, PB7->SDA *//* 转换为实际温度值(°C),参考手册中温度计算公式 */

corlin6688的博客 395

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

前言记得long long ago,刚刚开始写JS的时候,我喜欢写一些函数在JS文件里边,然后通过script标签引进来,在DOM节点上绑定onclick等事件,看了很多人写的代码,也大多是这样。后来会发现,当项目小的时候这么做为了快速开发是可以接受的,然而当很多人一起开发一个Javascript大应用的时候,你会发现不同的代码风格跟全局变量会导致很多冲突,这是一个很痛苦的事情。 曾经的经历用过j

小北哥哥和北妈 1万+

基于matlab的CNN食物识别分类系统,matlab深度学习分类,训练+数据集+界面

饮食在人们的日常生活、营养与医疗建议以及运动员等专业人士的训练上起着越来越重要的作用。随着互联网的发展和医学的进步,人们普遍上传分享和记录的食物图像形成了非常多的数据库,为了改善饮食结构,塑造更健康的生活方式,分析食物的种类、热量和进食时间成为了营养学上非常重要的研究方法,本文的使用深度学习算法可以根据用户上传的食物图像自动分析食物种类。深度学习是机器学习领域的一个研究方向。深度学习通过对数据特征的学习将原始数据转化为计算机可以理解的抽象数据,根据学习到的特征,可以对原始数据进行检测或分类。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4721

js全局变量污染问题

js全局变量污染的产生场景 js中全局变量污染的场景,当代码非常长,开发周期长,如果不想办法去解决或者防止全局变量污染的问题,就会造成二次赋值同一个之前定义过的变量。(由于项目开发周期过长你又不记得之前是否定义过这个变量,在赋值之前定义过的变量的时候就污染了全局变量。) 我们解决方案如下↓ 1. 使用namespace模式解决全局环境污染。 namespace模式就是把变量装在对象里面,在全局定义一个对象,然后把所有的你想写的全局变量定义在对象内部。你可以随时打印对象查询你是否定义过某个变量。 var ob

zhangyizuishuai的博客 2349

R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV

R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV

data+scenario+science+insight 649

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何避免 JavaScript 中的全局变量污染?

全局变量污染是指在 JavaScript 中,开发者不小心将变量或函数定义在全局作用域下,导致全局作用域被过多的共享变量占据,造成潜在的命名冲突和代码可维护性问题。全局变量的生命周期贯穿整个应用程序,因此很容易在项目中引起不可预测的行为。例如,以下代码中,counter就是一个全局变量,它可能在任何地方被修改或覆盖。// 全局变量counter++;// 修改全局变量// 访问全局变量避免全局变量污染是良好的 JavaScript 编程实践,能够提高代码的可维护性、可读性和可扩展性。

向着太阳迎着光 1069

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

解决全局变量污染

1、之前的问题: 用过jQuery的人就知道其主要的变量符号就是$没错因此很多项目的开发人 员也要学就自己把$定义成别的含义了我心里对其是无敌的鄙视跟厌恶。 我曾经拿过一个项目使用jQuery的然后上头要我使用一个已有的富文本编辑 器这样就有两个JS文件了 jquery.js和editor.js于是我要开始写该页面的逻辑了我发现editor.js 里边自定义了$符号

梦里回忆-专栏 3600

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

javascript全局变量和变量污染

javascript全局变量和变量污染 全局变量&&变量污染 定义全局变量有 3 种方式: 1:在任何函数体外直接使用 var 语句声明。 var a = 10; 2 :直接添加属性到全局对象上。在 Web 浏览器中,全局作用域对象为 window window.a = 10; 3:直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量。 a = 10; 全局变量在全...

T_221的博客 2359

JavaScript全局污染

当我们在全局声明变量的时候,我们干了啥? 先答后解:当我们var一个变量的时候,我们其实定义了一个不可配置的属性。谁的属性?当然是对象的属性。哪个对象?盲生,你发现了华点!window全局对象表示有被cue到。 PS:在非严格模式中,若未事先声明变量就直接赋值,js会隐式声明该变量,与用var声明的变量不同,这种隐式声明的变量是可配置的(可用delete运算符进行删除)。 首先,让我们var...

DDboom的博客 829

如何合理的声明JavaScript变量,避免污染全局变量

一、JavaScript变量声明 这里的变量声明主要是解释如何声明不污染全局变量,减少程序耦合,避免冲突,关于作用域以及作用域链,大家可以看看这篇文章:http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html 写的不错。片面的理解就是一山不容二虎,每全局声明一个变量,就增加了出错的风险。 我

What do u want 838

JavaScript变量污染

JavaScript变量污染 定义全局变量有 3 种方式: 1、在任何函数体外直接使用 var 语句声明。 var f = 'value1'; 2、直接添加属性到全局对象上。在 Web 浏览器中,全局作用域对象为 window。 window.f = 'value'; 3、直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量。 f = 'value' ; 全局变量在全局作用域...

kiku 461
上一篇: PHP Composer不会使用php 5.6安装Drush:phpunit / phpunit 4.8.x需要ext-dom
下一篇: Ubuntu 中 Apache2 安装、配置、卸载
firstcode666
博客等级 码龄5年 53粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值