JavaScript立即调用函数表达式(IIFE)

立即调用的函数表达式是一种在函数创建后立即执行的方法。 IIFE非常有用,因为它们不会污染全局对象,并且它们是隔离变量声明的简单方法


一个立即调用的函数表达式(IIFE供朋友使用)是一种在函数创建后立即执行的方法。

IIFE非常有用,因为他们不会污染全局对象,这是一种简单的方法隔离变量声明

这是定义IIFE的语法:

(function() {
  /* */
})()

IIFE也可以使用箭头功能定义:

(() => {
  /* */
})()

我们基本上在圆括号内定义了一个函数,然后附加()执行该功能:(/* function */)()

那些括弧实际上是使我们的函数在内部被视为表达式的原因。否则,函数声明将无效,因为我们未指定任何名称:

Invalid function declaration

函数声明需要一个名称,而函数表达式则不需要。

您也可以在括号中加上括号里面表达式用括号括起来,没有区别,只是样式首选项:

(function() {
  /* */
}())

(() => { /* */ }())

使用一元运算符的替代语法

您可以使用一些奇怪的语法来创建IIFE,但是在现实世界中很少使用它,它依赖于使用任何一元运算符:

-(function() {
  /* */
})() +
  (function() {
    /* */
  })()

~(function() { /* */ })()

!(function() { /* */ })()

(不适用于箭头功能)

命名为IIFE

IIFE也可以命名为常规函数(不是箭头函数)。这不会改变以下事实:该函数不会“泄漏”到全局范围,并且在执行后不能再次调用它:

(function doSomething() {
  /* */
})()

IIFE以分号开头

您可能会在野外看到这一点:

;(function() {
  /* */
})()

这样可以避免盲目串联两个JavaScript文件时出现问题。由于JavaScript不需要分号,因此您可能会在文件的最后一行连接一些语句,这会导致语法错误。

这个问题基本上可以通过“智能”代码打包器解决,例如网页包

免费下载我的JavaScript初学者手册


更多js教程: