Skip to content

说说你对“立即执行函数”的理解

参考答案:

什么是立即执行函数?

JS立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行。

立即执行函数的两种常见写法

  • 匿名函数包裹在一个括号运算符中,后面跟一个小括号
js
(function(){
    //...
})()
  • 匿名函数后面跟一个小括号,整个包裹在一个括号运算符中
js
(function(){
    //...
}())

(),!,+,-,=等运算符都能起到立即执行的作用,这些运算符的作用就是将匿名函数或函数声明转换为函数表达式。

注意:

  • 函数体后面要有小括号()
  • 函数体必须是函数表达式而不能是函数声明

例:

js
(function (test) {    //使用()运算符,输出123
    console.log(test);
})(123);

(function (test) {    //使用()运算符,输出123
    console.log(test);
}(123));

!function (test) {    //使用!运算符,输出123
    console.log(test);
}(123);
var fn = function (test) {  //使用=运算符,输出123
    console.log(test);
}(123);

好处

  • 不必为函数命名,避免了污染全局变量
  • 立即执行函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量
  • 封装变量

总之:立即执行函数会形成一个单独的作用域,可以封装一些临时变量或者局部变量,避免污染全局变量。

题目要点:

立即执行函数(Immediately Invoked Function Expression,简称 IIFE)是一种在 JavaScript 中常见的模式,用于创建一个匿名函数,并在定义后立即执行它。

立即执行函数有两种常见的写法:

  1. 匿名函数后跟小括号,整个包裹在一个括号运算符中:

    js
    (function(){
        //...
    }())
  2. 匿名函数包裹在一个括号运算符中,后面跟一个小括号:

    js
    (function(){
        //...
    })()

好处

  • 避免全局污染:不必为函数命名,因此不会污染全局命名空间。
  • 私有作用域:立即执行函数内部形成了一个单独的作用域,可以封装私有变量。
  • 封装变量:可以封装一些临时变量或局部变量,这些变量在外部无法访问。