深入理解 JavaScript 立即执行函数表达式(IIFE)

深入理解 JavaScript 立即执行函数表达式(IIFE)

什么是 IIFE?

IIFE(Immediately Invoked Function Expression)是一种 JavaScript 函数的写法,这种函数在定义后立即执行。它的基本语法是:

(function() {// 函数体
})();

IIFE 的组成部分

一个 IIFE 主要包含三个部分:

  1. 第一个括号 () 包裹函数定义,将函数声明转换为表达式
  2. 函数体部分包含实际要执行的代码
  3. 最后的括号 () 用于立即调用这个函数

为什么要使用 IIFE?

1. 创建独立的作用域

// 不使用 IIFE
var name = "全局变量";
console.log(name); // "全局变量"// 使用 IIFE
(function() {var name = "局部变量";console.log(name); // "局部变量"
})();console.log(name); // "全局变量"

2. 避免全局作用域污染

// 不好的做法
var counter = 0;
function increment() {counter++;
}// 使用 IIFE 的好做法
var counter = (function() {var count = 0;return {increment: function() {count++;return count;}};
})();

3. 模块化开发

var module = (function() {// 私有变量var privateVar = "我是私有的";// 私有方法function privateFunction() {return privateVar;}// 返回公共接口return {publicMethod: function() {return privateFunction();}};
})();

IIFE 的不同写法

1. 基础写法

(function() {console.log("基础IIFE");
})();

2. 带参数的 IIFE

(function(name) {console.log("你好, " + name);
})("张三");

3. 返回值的 IIFE

var result = (function() {return "IIFE的返回值";
})();

4. 箭头函数形式

(() => {console.log("使用箭头函数的IIFE");
})();

IIFE 的实际应用场景

1. 初始化代码

(function() {// 页面初始化代码document.querySelector('#app').style.display = 'block';loadConfig();setupEventListeners();
})();

2. 避免命名冲突

(function($) {// 这里的 $ 就是 jQuery$('.myButton').click(function() {// 处理点击事件});
})(jQuery);

3. 创建私有变量

const counter = (function() {let count = 0;  // 私有变量return {increment() {return ++count;},getCount() {return count;}};
})();

注意事项

  1. IIFE 内的变量都是局部的,外部无法直接访问
  2. 如果需要访问全局变量,可以将它们作为参数传入
  3. IIFE 可以有返回值,常用于模块化开发
  4. 现代 JavaScript 开发中,可以使用模块系统代替 IIFE

总结

立即执行函数表达式(IIFE)是 JavaScript 中一个重要的概念,它能:

  • 创建独立的作用域
  • 避免全局污染
  • 实现模块化
  • 保护私有变量

虽然在现代 JavaScript 开发中,我们有了更多选择(如模块系统),但理解 IIFE 仍然很重要,因为:

  1. 很多老代码仍在使用 IIFE
  2. 在某些特定场景下 IIFE 仍是最佳选择
  3. 理解 IIFE 有助于更好地理解 JavaScript 的作用域和闭包概念

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502964.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极客说|微软 Phi 系列小模型和多模态小模型

作者:胡平 - 微软云人工智能高级专家 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

封装/前线修饰符/Idea项目结构/package/impore

目录 1. 封装的情景引入 2. 封装的体现 3. 权限修饰符 4. Idea 项目结构 5. package 关键字 6. import 关键字 7. 练习 程序设计:高内聚,低耦合; 高内聚:将类的内部操作“隐藏”起来,不需要外界干涉&#xff1b…

【C++】P5733 【深基6.例1】自动修正

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯解题思路概述💯第一种实现方式:直接使用字符ASCII值计算代码实现代码分析 💯第二种实现方式:直接修改…

【Elasticsearch】文档操作:添加、更新和删除

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、插入方式 💯2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…

权限掩码umask

1 、 设置新建文件或目录的默认权限 在 Linux 系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask 值有关,其具体关系是: 新建文件的默认权限 0666-umask 值 新建…

202-01-06 Unity 使用 Tip1 —— UnityHub 模块卸载重装

文章目录 1 卸载模块2 更新配置文件3 重启 UnityHub 起因: ​ WebGL 平台打包程序报错,懒得修复了,因此粗暴地删了重装。但是 UnityHub 不支持卸载模块,因此手动配置。 1 卸载模块 ​ 以 Unity 6000.0.26f1c1 为例,其…

打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet

一、引言 1.1 研究背景与意义 在现代医疗领域,医学影像作为疾病诊断与治疗的关键依据,发挥着不可替代的作用。从传统的X射线、CT(计算机断层扫描)到MRI(磁共振成像)等先进技术,医学影像能够直观呈现人体内部结构,为医生提供丰富的诊断信息,涵盖疾病识别、病灶定位、…

国产编辑器EverEdit - 两种删除空白行的方法

1 使用技巧:删除空白行 1.1 应用场景 用户在编辑文档时,可能会遇到很多空白行需要删除的情况,比如从网页上拷贝文字,可能就会存在大量的空白行要删除。 1.2 使用方法 1.2.1 方法1: 使用编辑主菜单 选择主菜单编辑 …

李宏毅机器学习笔记-Transformer

目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己…

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…

指针 const 的组合

1、首先来了解一下常量 const int num 5; 那么num的值是5, num的值不可修改 2、来了解一下指针 int value 5; int* p &value; 我喜欢吧指针和类型放一起,来强调p是一个指针类型, 而赋值的时候就得赋值一个int类型的地址…

《C++11》各种初始化方式的详细列举与对比

在 C 中,初始化对象的方式多种多样。随着 C 标准的演进,特别是 C11 的引入,初始化方式得到了显著的扩展和改进。本文将详细列举 C 中的各种初始化方式,并对它们进行对比,帮助开发者更好地理解和应用这些特性。 1. C98…

前端小案例——520表白信封

前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…

【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)

文章目录 Section 4:The Vim Help System(Vim 帮助系统)S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…

10-C语言项目池

C语言项目池 《个人通讯录》 《火车订票系统》 管理员用户1录入火车票信息区间查询/购票2显示火车票信息打印购票信息3查询火车票信息退票4修改火车票信息5添加火车票信息 《学生学籍管理系统》 1录入学生信息2添加学生信息3显示学生信息4查找学生信息5删除学生信息6修改学…

Android 绘制学习总结

1、刷新率介绍 我们先来理一下基本的概念: 1、60 fps 的意思是说,画面每秒更新 60 次 2、这 60 次更新,是要均匀更新的,不是说一会快,一会慢,那样视觉上也会觉得不流畅 3、每秒 60 次,也就是 1…

每日一题:BM1 反转链表

文章目录 [toc]问题描述数据范围示例 C代码实现使用栈实现(不符合要求,仅作为思路) 解题思路 - 原地反转链表步骤 C语言代码实现 以前只用过C刷过代码题目,现在试着用C语言刷下 问题描述 给定一个单链表的头结点 pHead&#xff…

78、使用爱芯派2_AX630C开发板 3.2T高有效算力 低功耗 支持AI-ISP真黑光实验

基本思想:使用爱心元智最新的版本开发板进行实验 AX630C、AX620Q 都是 620E 这一代 一、参考这个官方教程,先把代码在本地交叉编译完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷贝到620c设备上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

【Redis经典面试题七】Redis的事务机制是怎样的?

目录 一、Redis的事务机制 二、什么是Redis的Pipeline?和事务有什么区别? 三、Redis的事务和Lua之间有哪些区别? 3.1 原子性保证 3.2 交互次数 3.3 前后依赖 3.4 流程编排 四、为什么Lua脚本可以保证原子性? 五、为什么R…