知识卡片

全局变量污染

普通读书笔记卡 · 1491.b

内容

JS 可随意定义全局变量容纳资源,但把多个名字放进全局作用域会增加命名冲突和意外覆盖概率。最小化暴露的方法是只创建唯一全局变量作命名空间(如 var MYAPP = {}),把资源挂其下,显著降低与其他脚本/类库冲突、也更易读。发散:微应用、插件系统和脚本注入场景更需要这种隔离意识;闭包是另一种减少全局污染的手段。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第3章《对象 Objects》"减少全局变量污染"一节 - 结论依据:原文指出全局变量削弱程序灵活性、应该避免,并给出用单一命名空间对象收纳所有资源的具体写法,说明这样做能降低与其他程序/组件/类库的冲突概率、提升可读性,由此推出"用命名空间对象收敛全局暴露面"的结论。 - 原始内容:JavaScript可以很随意地定义全局变量来容纳你的应用的所有资源。遗憾的是,全局变量削弱了程序的灵活性,应该避免使用……只要把全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或类库之间发生冲突的可能性就会显著降低。