作为 JavaScript IIFE 的箭头函数版本,{} 的解释是什么?

What's the explanation for {} as an arrow function version of JavaScript IIFE?

IIFE 的正常箭头函数版本是这样的:

(() => {
  console.log('IIFE 1');
})();

但是 I've found here 以下(非常短)的形式也有效:

As a bit of extra credit there's an even shorter way to write IIFEs in ES6 which is to use the new function context syntax all on its own like so:

{
  console.log('IIFE 2');
}

为什么只有 {} 就够了?

第一个例子创建了一个函数(调用console.log),然后立即调用它。

第二个示例没有创建函数。它只有一个 block

因为它满足IIFE(立即调用函数表达式)要求的两个条件:

  • 防止外部访问 IIFE 中的变量,并避免污染全局范围。
  • 立即执行

https://developer.mozilla.org/en-US/docs/Glossary/IIFE

正如作者指出的那样,唯一的限制是您不能将外部参数传递给块。

那么调用 IIFE 有什么意义呢? 运行 一些代码在它自己的上下文中,对吧?

这就是花括号的作用,它们将代码块分组。从 ES6 开始,用 constlet 声明的变量在代码块之外是不可用的。所以

(() => {
  var x = 'IIFE 1'
  console.log(x);
})();

{
  let x = 'IIFE 1'
  console.log(x);
}

等价