迷新白的博客 迷新白的博客
首页
随笔
  • Vuepress
  • Springboot
  • 开发工具
  • 系统工具
读吧
  • 智能浇花系统 (opens new window)
  • 用户中心系统 (opens new window)
  • 关于
  • 友情链接
GitHub (opens new window)

迷新白

愿你平安
首页
随笔
  • Vuepress
  • Springboot
  • 开发工具
  • 系统工具
读吧
  • 智能浇花系统 (opens new window)
  • 用户中心系统 (opens new window)
  • 关于
  • 友情链接
GitHub (opens new window)
  • Vuepress

  • 前端基础

  • Vue

  • CSS

  • JavaScript

    • JavaScript计时器
    • JavaScript文档流
    • JavaScript快速调用函数IIFE
      • 立即执行函数的定义
      • 立即执行函数的用途
      • IIFE的延展形态
    • JavaScript鼠标事件
    • Java数组问题:Array constants can only be used in initializers
    • JavaScript的switch语句
  • 前端
  • JavaScript
迷新白
2025-08-09
目录

JavaScript快速调用函数IIFE

IIFE是JavaScript中一种定义后就会快速调用的写法,也被称为自执行匿名函数、立即执行函数

# 立即执行函数的定义

// 标准 IIFE
(function () {
  // 语句……
})();
1
2
3
4

通常,函数的声明有这两种

function fnA(){
    alert("msg");
}//声明式定义函数
var fnB = function(){
    alert("msg");
}//函数赋值表达式定义函数
1
2
3
4
5
6

如果尝试为一个定义函数末尾加上(),解析器是无法理解的

function msg(){
    alert("msg");
}();//解析器无法理解
1
2
3

定义函数的调用方式应该是msg(),为什么将函数体部分用()包裹起来就可以执行了呢?

原来,使用括号包括定义函数体,解析器将会以函数表达式的方式去调用定义函数,也就是说,任何能将函数标称一个函数表达式的作法,都可以使得解析器正确的调用定义函数,而 ! 就是其中的一种,而 + - || &&都有这样的功能。

另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

推荐阅读function与感叹号 (swordair.com) (opens new window)

javascript里function之前加上感叹号 ' ! ' 会怎么样? - SegmentFault 思否 (opens new window)

# 立即执行函数的用途

创建一个独立的作用域,这个作用域里面的变量,外部访问不到,避免变量污染,能形成一个 块级作用域 效果

(function () {
    // 块级作用域
})();
1
2
3

这在没有块级作用域的 ES3 时代,是普遍的做法(PS:在 ES5 只有全局作用域和函数作用域,没有块级作用域)

let实际上为 JavaScript 新增了块级作用域

# IIFE的延展形态

我们常见的 IIFE 是这样的:

;(function() {
   ...
})()
1
2
3

但是不乏看到这样的代码

(function (window) {
    console.log(window);
})(window);
1
2
3

IIFE只执行一次,它可以定义一个匿名函数并且自己传入参数调用

(function (name) {
    console.log(name);
})('johan');
1
2
3
更新时间: 2025/8/10 23:19:43
JavaScript文档流
JavaScript鼠标事件

← JavaScript文档流 JavaScript鼠标事件→

最近更新
01
JavaScript计时器
08-09
02
CSS-动画效果
08-09
03
JavaScript文档流
08-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 迷新白 | 的博客
sitemap icon by Icons8
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式