什么是JavaScript中的IIFE?

立即调用函数表达式(Immediately Invoked Function Expression,简称IIFE)是一个在JavaScript运行时立即调用的函数。下面是一个示例,展示了一个大致等效的代码:

// IIFE
(function (message) {
  console.log(message);
})('Hello World');
// 输出:'Hello World'

// 使用命名函数的等效代码
function logMessage(message) {
  console.log(message);
}

logMessage('Hello World'); // 输出:'Hello World'

记住这里的“大致等效”部分?唯一的区别是使用了命名函数而不是匿名函数。通过这个示例,我们可以很容易地分解出IIFE的结构:

  • 可选的分号,用于避免在缩小等情况下出现TypeError
  • 一个匿名函数,包含我们想要调用的所有代码。
  • 开始和结束的括号,用于包裹匿名函数。
  • 括号用于调用函数,并传递任何要调用的参数。

请注意,你也可以使用箭头函数来创建IIFE,如果你喜欢的话。只需记住在这种情况下常规函数和箭头函数之间的区别。我们之前的关于箭头函数this关键字的文章应该已经涵盖了它们的内容。

// 所有这些都是等效的,前导分号是可选的
;(() => console.log('Hello'))();
;(function(){ console.log('Hello'); })();
;(function(){ console.log('Hello'); })();
;(function(){ console.log('Hello'); }());

IIFE经常用于运行一些代码,同时将其和其变量保持在全局作用域之外。它们经常因缺乏可读性和对初学者的困惑而受到批评。此外,随着JavaScript模块和转译器的兴起,它们开始变得不那么常见,可能会随着时间的推移越来越少见。