什么是IIFE?它有什么作用?

IIFE:Immediately Invoked Function Expression,意为立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数。

ES5 中没有块级作用域,所以主要通过匿名函数方式达到块级作用域的效果。

JS 引擎规定:只要 function 关键字出现在行首,一律解释成函数声明语句,而函数声明后面是不能跟圆括号的;函数表达式后面则可以跟圆括号。所以可以将函数声明"转换"成函数表达式。

(function () { console.log(123); }());

除了加圆括号,还有其他方式:

true && function () {
  console.log(2);
}();
!function () {
  console.log(2);
}();

IIFE 的优点

  • 避免了向全局作用域中添加变量和函数(避免污染全局)。
  • 形成独立的作用域,内部定义的变量外部无法访问。
(function () { /* ... */ })();
(function () { /* ... */ }());

注意 function bb(){...} 这种函数声明后面不能跟圆括号直接调用,但可通过 (function(){...})() 立即执行。

来源整理自:我的有道云笔记