我需要将 IIFE 与 ES6 模块一起使用吗?

Do I need to use IIFE with ES6 modules?

在 airbnb 风格指南中,它指出几乎不需要 IIFE。

https://github.com/airbnb/javascript/blob/master/README.md#functions

7.2 将立即调用的函数表达式括在括号中。 eslint: wrap-iife

为什么?一个立即调用的函数表达式是一个单一的单元——将它和它的调用括号一起包装在括号中,清楚地表达了这一点。 请注意,在一个到处都是模块的世界中,您几乎不需要 IIFE。

// immediately-invoked function expression (IIFE)
(function () {
  console.log('Welcome to the Internet. Please follow me.');
}());

谁能解释一下为什么会这样?我找不到任何解释说如果我在模块 js 脚本的顶层创建一个函数,它将 not 在全局命名空间中。

IIFE 最常见的用途是为变量创建一个作用域,这样它们就不会成为全局变量。

模块有自己的作用域,在模块的顶层声明的变量的作用域是该模块,而不是全局的。