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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Vista初探_Vista Alegre

    Vista初探_Vista Alegre昨天安装了手中的WindowsVistaBusiness,经过几个小时的摸索,我对Vista这个大块头有了一些个人体会,拿出来给大家分享。一、安装及激活:从安装开始说,在我安装之前,我已经有WindowsXP和Ubuntu两套操作系统,启动由Linux的Grub引导,如何把Vista装进硬盘又不影响Ubuntu的启动是第一个需要解决的问题。(以下括号内为题外话,如果你觉…

    2022年10月11日
  • ssm框架过时了吗_spring实战

    ssm框架过时了吗_spring实战SpringSpring是一个开源的免费的框架Spring是一个轻量级的,非入侵式的框架控制反转(IOC),面向切面编程(AOP)支持事务的处理,对框架整合的支持IOC理论UserDaoUserDaoImpUserSeviceUserServiceImp在之前,用户的需求可能会影响原来的代码。使用一个set。public void setUserDao(UserDao userDao){ this.userDao = userDao;}之前是主动创建对象,控制

  • android操作系统详细目录结构

    android操作系统详细目录结构\system\app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。下面是详细的介绍:\system\app\AlarmClock.apk闹钟\system\app\AlarmClock.odex\system\app\Browser.apk浏览器

    2022年10月15日
  • MATLAB函数拟合使用

    MATLAB函数拟合使用1函数命令拟合最常用的函数拟合命令为fit,语法为|[拟合结果拟合精度]=fit(X数据,Y数据,‘拟合类型’)其中,具体的拟合类型可以参看帮助文档,也可以使用fittype来自定义新的函数类型,比如定义拟合函数a*x+b*x^2+exp(4*x);|newtype=fittype(‘a*x+b*x^2+exp(4*x)’);fit(x,y,newtype);x=[1;2;…

  • 武侠世界中的ERP乱弹[通俗易懂]

    1990年一位威力大侠(Wylie)发明了ERP,它内通百窍(企业各个业务部门),外通天地二气(客户,供应商),彻底摆脱了原先MRP,MRPII对人体的约束,从此武侠世界进入了新的篇章,各式奇功妙法,各路英雄豪杰辈出,好一派繁荣盛世!二十几年的血雨腥风过去了,江湖格局日趋稳定。天下以五派为尊,分别是SAP,Oracle,Sage,Infor,Microsoft,其它小门小派,不一一细数。作

  • vscode 前端最佳插件配置

    vscode最佳配置配置说明详解vscode配置内容在最后,已附上editor是针对vscode的风格设置例如tabSize:一个tab等于2个空格,行高为24pxworkbench是针对vscode的主题设置例如iconTheme(图标风格):使用插件vscode-great-icons(需搜索安装)例如color…

发表回复

您的电子邮箱地址不会被公开。

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