【问题标题】:Do I need to use IIFE with ES6 modules?我需要将 IIFE 与 ES6 模块一起使用吗?
【发布时间】:2020-06-08 17:44:55
【问题描述】:

在 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 脚本的顶层创建一个函数,它将在全局命名空间中。

【问题讨论】:

  • 模块的全部意义在于它们显式地导出东西,其效果也是顶级声明不是全局的。
  • 在我看来,any 命名空间可能是您不想污染的命名空间。

标签: javascript ecmascript-6 module iife


【解决方案1】:

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

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

【讨论】:

  • 谢谢,看来我从根本上误解了模块,因此我的代码是双重作用域的(并且越来越难以理解)。
猜你喜欢
  • 2014-10-23
  • 2020-07-03
  • 1970-01-01
  • 2017-03-10
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多