背景
在JavaScript中导入模块时,我们会使用导入模块的名称来污染全局命名空间:
foo.js
export foo() {..};
export const bar = 3.14;
index.js
import { foo, bar } from './foo.js';
问题
在 index.js
中,foo
和 bar
存在于全局命名空间中,对吗?那么,假设我发布此模块,并有人将它与另一个脚本一起在其 HTML 文件中使用,该脚本还在全局命名空间中定义了变量 foo
和 bar
。那么我们就会有冲突了吗?
我猜这可以通过在一个 IIFE 中包装 main.js
中的所有内容来解决。但是,由于某种原因,ESLint 对此提出了异议,这让我想知道是否IIFE不是保护全局命名空间的首选/推荐方法。
- 全局命名空间是否会被污染以及
foo
和bar
是否会产生冲突? - 如果是,我应该如何避免?
谢谢。
foo
和bar
不会放在全局作用域中。但是,如果没有使用打包工具,那么Chris G所说的是正确的。 - mhodges(function(){ let foo = 5; const bar = 3.14; if(foo) foo += bar; })()
并得到了 "无需 Lint!"。 - Travis J