[js]全局变量污染的问题

和方方老师讨论全局变量污染的问题

问题缘起

DOM元素的绑定事件用内联模型有什么坏处:全局变量。 我们用命名空间的方式编码,并不存在全局变量污染的问题。实际上,多个命名空间本质上就是全局变量。
突然有疑惑:全局变量有什么坏处到底?一开始约定好了,保证不会冲突不就完了吗。

他们认为 JS 默认的 script + 全局变量的方式不够「工程化」。比如模块之间的依赖问题。(这个值得底下去好好研究一下。requirejs是如何解决模块之间的依赖的问题的)

讨论内容涉及

  1. requirejs 另一个特性是按需加载(随时改变依赖条件,这是依赖注入的一个知识点。比如一个方法,被零散地到处调用,你想改就会很难改,但用了requirejs这种方式之后,你想改变依赖关系,只需要注册的模块相应减少就好了),真的是降低页面加载速度的「好」东西。
  2. 还有一个特性就是解决模块之间的依赖问题。有了这个特性,你就可以把模块写得很小。而且不用在意模块之间的相互依赖。
    但是问题又来了。模块写那么小管理起来多费劲啊。一个jquery还要拆成core和ajax,deferred等等。
    这都是为了按需引用?写起来费劲,应用起来方便?
    然后前端发明了打包工具 把这些文件合并成一个。
  3. 我认为onclick这种内联的写法便于查看绑定的事件。实际上开发者工具也可以看事件绑定。
  4. 所以要走局部化,所有系统都不暴露全局变量。不过其实也有重名问题。

参考文献

  1. Javascript模块化编程(三):require.js的用法
  2. Javascript模块化编程(二):AMD规范
  3. Javascript模块化编程(一):模块的写法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容