资讯专栏INFORMATION COLUMN

全局变量污染什么的最讨厌了

noONE / 2715人阅读

摘要:原则用匿名函数将脚本包起来使用多级命名空间。看这把没有写了吧就是这么任性,上面的那个写了的也绝逼不改使用匿名函数通过匿名函数改变了和中的变量的作用域,使得他们都不再是全局变量了,但是在中无法访问在中的变量,换而言之,他们之间没办法通信了。

原则

用匿名函数将脚本包起来;

使用多级命名空间。

这第二条“使用多级命名空间”这个,我觉得并不是很完美的好主意。因为如果级数太多的话会造成变量名字变得长的一逼。

改进过程 原始代码

没有做过任何优化的满目疮痍的代码。a.js 和 b.js 都有全局变量 window.a ,导致冲突,全局变量属于 window 作用域下的。

//a.js


//b.js
使用匿名函数

通过匿名函数改变了a.js 和 b.js 中的变量 a 的作用域,使得他们都不再是全局变量了,但是在 b.js 中无法访问在 a.js 中的变量 a, 换而言之,他们之间没办法通信了。

//a.js
(function() {
    var a = 123, b = "hello world";
})();

//b.js
(function() {
    var a, c = "abc";
})();
使用全局变量进行通信
var str;
//a.js
(function() {
    var a = 123,
    b = "hello world";
    window.str = a;
})();

//b.js
(function() {
    var a, c = "abc";
    alert(window.str);
})();

使用 window.str 这种全局全局变量作为通信的媒介其实并不是一个好办法,这样做会导致全局变量越来越多,反而不好维护。

使用命名空间
var GLOBAL = {};
//a.js
(function() {
    var a = 123,
    b = "hello world";
    GLOBAL.A.a = a;
})();

//b.js
(function() {
    var a, c = "abc";
    alert(GLOBAL.A.a);
})();

使用单一的全局变量 GlOBAL ,匿名空间里需要保存的属性都在全局变量 GLOBAL 的基础上使用命名空间的方式进行拓展。这里给命名空间起名字也需要很讲究,好的命名规则会对团队协同合作有很大的帮助。具体的命名方式待我卖个关子,以后再说。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85906.html

相关文章

  • 函数的实参 函数的形参 闭包 js

    摘要:不在任何函数内声明的变量为全局变量。加变成一个函数表达式,解释器运行创建一个匿名的函数表达式闭包终于到闭包了。 函数的实参和形参 可选形参 if(a === undefined) a = []; 等价于 a = a || []; 这两句是完全等价的,只不过后者需要提前声明a而已如果参数没有传入,其余的填充undefined可选的形式参数:通过注释/optional/来强调参数可选,并且...

    huhud 评论0 收藏0
  • 漫谈Nuclear Web组件化入门篇

    摘要:目前来看,团队内部前端项目已全面实施组件化开发。层叠样式保佑不要污染别的在前端,一般一个组件必须要有骨架和装饰的以及逻辑。事件绑定条件判断秒后改变,会自动变更。循环姓名年龄增加修改移除的变更也能监听到,能够自动触发的变更。 目前来看,团队内部前端项目已全面实施组件化开发。组件化的好处太多,如:按需加载、可复用、易维护、可扩展、少挖坑、不改组件代码直接切成服务器端渲染(如Nuclear组...

    VPointer 评论0 收藏0
  • 《深入理解ES6》笔记——块级作用域绑定(1)

    摘要:没有声明的情况和都能够声明块级作用域,用法和是类似的,的特点是不会变量提升,而是被锁在当前块中。声明常量,一旦声明,不可更改,而且常量必须初始化赋值。临时死区的意思是在当前作用域的块内,在声明变量前的区域叫做临时死区。 本章涉及3个知识点,var、let、const,现在让我们了解3个关键字的特性和使用方法。 var JavaScript中,我们通常说的作用域是函数作用域,使用var声...

    2bdenny 评论0 收藏0

发表评论

0条评论

noONE

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<