IIFE的普通箭头功能版本是这样:
(() => {
console.log('IIFE 1');
})();
但是I've found here也可以使用以下形式(确实很短):
作为额外的功劳,可以使用以下更短的方法编写IIFE:ES6将独自使用新的函数上下文语法像这样:
{
console.log('IIFE 2');
}
为什么只有{}
足够?
第一个示例创建一个功能(调用console.log
),然后立即调用它。
第二个示例未创建函数。它只有一个block。
那么叫IIFE有什么意义呢?是在自己的上下文中运行一些代码,对吗?
这就是花括号,它们将代码块分组。在ES6中,用const
或let
声明的变量在代码块外部不可用。所以
(() => {
var x = 'IIFE 1'
console.log(x);
})();
和
{
let x = 'IIFE 1'
console.log(x);
}
相当于
这有两个原因:
{}
)中指的“速记”正在使用Object Property Value Shorthand。由于新对象的“属性”不包含键,因此JavaScript的引擎会自动将其分配为函数,并且由于它是对象定义,因此您还将获得新的作用域。因为它同时满足IIFE(立即调用函数表达式)所要求的两个条件:
https://developer.mozilla.org/en-US/docs/Glossary/IIFE
正如作者指出的,唯一的限制是您不能将外部参数传递给块。