作为 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 开始,用 const
或 let
声明的变量在代码块之外是不可用的。所以
(() => {
var x = 'IIFE 1'
console.log(x);
})();
和
{
let x = 'IIFE 1'
console.log(x);
}
等价
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 开始,用 const
或 let
声明的变量在代码块之外是不可用的。所以
(() => {
var x = 'IIFE 1'
console.log(x);
})();
和
{
let x = 'IIFE 1'
console.log(x);
}
等价