大家好,又见面了,我是你们的朋友全栈君。
最近踩了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账号...