谨慎使用js全局变量「建议收藏」

谨慎使用js全局变量「建议收藏」最近踩了JavaScript滥用全局变量的坑。我们知道,在java中有单例模式,使用@Singleton和@Startup注解在相应类上,就可以很方便随时使用它了,既不用频繁new对象(省空间),又不需要手动去维护它。而在我写前台脚本时,也图方便随意的定义了一些js的全局变量,然后就悲催了。首先,请看以下引用https://blog.csdn.net/yangwensheng1122/articl…

大家好,又见面了,我是你们的朋友全栈君。

最近踩了JavaScript滥用全局变量的坑。我们知道,在java中有单例模式,使用@Singleton和@Startup注解在相应类上,就可以很方便随时使用它了,既不用频繁new对象(省空间),又不需要手动去维护它。而在我写前台脚本时,也图方便随意的定义了一些js的全局变量,然后就悲催了。首先,请看以下引用https://blog.csdn.net/yangwensheng1122/article/details/77084503 的博客总结:

“全局变量的优点:可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。
全局变量的缺点:
(1)全局变量保存在静态存贮区,程序开始运行时为其分配内存,程序结束释放该内存。与局部变量的动态分配、动态释放相比,生存期比较长,因此过多的全局变量会占用较多的内存单元。
(2)全局变量破坏了函数的封装性能。函数象一个黑匣子,一般是通过函数参数和返回值进行输入输出,函数内部实现相对独立。但函数中如果使用了全局变量,那么函数体内的语句就可以绕过函数参数和返回值进行存取,这种情况破坏了函数的独立性,使函数对全局变量产生依赖。同时,也降低了该函数的可移植性。
(3)全局变量使函数的代码可读性降低。由于多个函数都可能使用全局变量,函数执行时全局变量的值可能随时发生变化,对于程序的查错和调试都非常不利。
因此,如果不是万不得已,最好不要使用全局变量。”

(再次声明转载原文:https://blog.csdn.net/yangwensheng1122/article/details/77084503 )

是啊,js里定义的全局变量,通常是为了传参、周转数据方便;如果是这样那么问题来了!它的状态会经常改变,不同的函数改变了它的状态后,在结束当前业务逻辑时,还得要记得判断它的当前状态或者恢复初始状态;要保证函数干净,作用单一,就不能让函数内部变量去和全局变量交换数据(方法污染),否则,函数就对当前文档产生了依赖,不仅不利于复用,更严重的后果就是随着不同的业务逻辑频繁的改变全局变量,最后会发现数据对不上,给调试带来许多麻烦(因为开发时思维即使再缜密,也很难持续跟踪当前这个变量的状态以至于忘了检核或复位它)。所以,决定是否要使用全局变量应先考量它的状态是否会经常改变,如果不稳定,就应尽量避免定义转而尝试其他实现策略。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132359.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • md5 java 工具类_javamd5工具类

    md5 java 工具类_javamd5工具类importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.util.HashMap;importjava.util.Map;importjava.util.concurrent.locks.ReentrantLock;importorg.apache.commons.l…

    2022年7月14日
    18
  • EfficientNet网络详解[通俗易懂]

    EfficientNet网络详解[通俗易懂]目录前言论文思想网络详细结构MBConv结构EfficientNet(B0-B7)参数前言原论文名称:EfficientNet:RethinkingModelScalingforConvolutionalNeuralNetworks论文下载地址:https://arxiv.org/abs/1905.11946原论文提供代码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet自己使用Pyt

    2022年7月26日
    4
  • 服务器lsass状态代码c0000005,提示LSASS.EXE失败状态代码C0000005

    服务器lsass状态代码c0000005,提示LSASS.EXE失败状态代码C0000005提示LSASS.EXE失败状态代码C0000005故障问题:电脑出现提示一个关键系统进程,C:Windowssystem32lsass.exe失败,状态代码是c0000005。现在必须重新启动机器然后就开始倒计时自动重新启动。用杀毒后没有发现病毒。故障处理:这个问题不一定是跟病毒有关,有些恶意软件和电源管理程序也会导致这个故障现象。使用360安全卫士或恶意软件清理助手清理一下看看。另外,如果Win…

    2022年5月2日
    86
  • Jenkins(2)docker容器中安装python3[通俗易懂]

    Jenkins(2)docker容器中安装python3[通俗易懂]前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月28日
    8
  • 正弦波放大电路与移相电路设计

    正弦波放大电路与移相电路设计原文地址 http www docin com p 613242880 html 相关文章 1 正弦波放大电路 http zhidao baidu com link url lE4Ox8xWoSal 7C9ZIbVzmGJ4 j2efLU2 Z

    2025年9月6日
    4
  • java开发中什么是bd设计,西安交通大学17年9月课程考试《Java语言程序设计》作业考核试题…

    java开发中什么是bd设计,西安交通大学17年9月课程考试《Java语言程序设计》作业考核试题…西安交通大学17年9月课程考试《Java语言程序设计》作业考核试题试卷总分:100得分:0一、单选题(共25道试题,共50分)1.设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,则表达式x+y*a/x+b/y+c的值为()类型。A.intB.longC.doubleD.char满分:2分2.在Java中用什么关键…

    2022年7月8日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号