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

问题描述 投票:-1回答:4

IIFE的普通箭头功能版本是这样:

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

但是I've found here也可以使用以下形式(确实很短):

作为额外的功劳,可以使用以下更短的方法编写IIFE:ES6将独自使用新的函数上下文语法像这样:

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

为什么只有{}足够?

javascript ecmascript-6 arrow-functions iife
4个回答
1
投票

第一个示例创建一个功能(调用console.log),然后立即调用它。

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


0
投票

那么叫IIFE有什么意义呢?是在自己的上下文中运行一些代码,对吗?

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

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

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

相当于


-2
投票

这有两个原因:

  1. 您必须记住,JavaScript中的所有内容都是对象(包括函数)。
  2. 您在示例({})中指的“速记”正在使用Object Property Value Shorthand。由于新对象的“属性”不包含键,因此JavaScript的引擎会自动将其分配为函数,并且由于它是对象定义,因此您还将获得新的作用域。

-2
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.