[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模块化编程(一):模块的写法

你可能感兴趣的:([js]全局变量污染的问题)