daily-interview / fe-interview

:smiley: 每日一道经典前端面试题,一起共同成长。
https://blog.csdn.net/u010494753
MIT License
173 stars 22 forks source link

什么是IIFE? #22

Open artdong opened 5 years ago

artdong commented 5 years ago

什么是IIFE?

artdong commented 5 years ago

什么是IIFE

IIFE( 立即调用函数表达式)是一个在定义时就会立即执行的 JavaScript 函数。

这是一个被称为 自执行匿名函数 的设计模式,主要包含两部分。第一部分是包围在 圆括号运算符 () 里的一个匿名函数,这个匿名函数拥有独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。

第二部分再一次使用 () 创建了一个立即执行函数表达式,JavaScript 引擎到此将直接执行函数。

IIFE特点

为什么下面这段代码不是IIFE

function foo() {
console.log('hello');
}();

以function关键字开头的语句会被解析为函数声明,而函数声明是不允许直接运行的。 只有当解析器把这句话解析为函数表达式,才能够直接运行,怎么办呢?以运算符开头就可以了。

下面都是IIFE(自执行函数表达式)

(function foo(){ console.log('hello'); })();
(function foo(){ console.log('hello'); }());
!function foo(){ console.log('hello'); }();
+function foo(){ console.log('hello'); }();
void function foo() {console.log('hello')}();