优雅而高效——立即执行函数表达式()();

在这里插入图片描述

😆博主:小猫娃来啦
😆文章核心:优雅而高效——立即执行函数表达式()();

文章目录

  • 前言
  • 立即执行函数表达式的定义和特点
  • 立即执行函数表达式的应用场景
    • 封装私有变量和方法
    • 避免全局变量污染
    • 模块化开发
  • 立即执行函数表达式的写法和示例代码
    • 基本写法
    • 传递参数
    • 返回值
  • 总结

前言

在 JavaScript 中,立即执行函数表达式(Immediately Invoked Function Expression,简称IIFE)是一种常见的函数调用方式。它允许我们在定义函数后立即执行该函数,并且不会污染全局命名空间。本文将介绍立即执行函数表达式的定义、特点和应用场景,并通过示例代码演示其用法。


立即执行函数表达式的定义和特点

立即执行函数表达式是一种在定义后立即执行的函数调用方式。它的特点是函数定义后紧跟一对括号,并且可以传递参数。

立即执行函数表达式的特点包括:

  • 函数定义后立即执行,无需显式调用。
  • 函数内部的变量和函数在执行后会立即销毁,不会对外部产生影响。
  • 可以传递参数,实现更灵活的调用方式。

立即执行函数表达式的应用场景

立即执行函数表达式在实际开发中有多种应用场景,以下是其中几个常见的应用场景:

封装私有变量和方法

立即执行函数表达式可以用于封装私有变量和方法,避免全局命名空间的污染。通过将变量和方法定义在立即执行函数内部,可以确保它们只在函数内部可见,外部无法访问。

示例代码:

(function() {var privateVariable = "私有变量";function privateMethod() {console.log("私有方法");}// 在函数内部使用私有变量和方法console.log(privateVariable);privateMethod();
})();// 在函数外部无法访问私有变量和方法
console.log(privateVariable); // 报错:privateVariable is not defined
privateMethod(); // 报错:privateMethod is not defined

在上面的示例中,我们使用立即执行函数表达式封装了私有变量 privateVariable 和私有方法 privateMethod。这样,它们只在函数内部可见,外部无法访问。

避免全局变量污染

立即执行函数表达式可以避免全局变量的污染。通过将代码放在立即执行函数内部,可以将变量和函数的作用域限制在函数内部,不会对外部的全局命名空间产生影响。

示例代码:

(function() {var name = "加菲猫";console.log("Hello, " + name + "!");
})();console.log(name); // 报错:name is not defined

在上面的示例中,我们使用立即执行函数表达式将变量 name 的作用域限制在函数内部。在函数外部无法访问该变量,从而避免了全局变量的污染。

模块化开发

立即执行函数表达式可以用于实现模块化开发。通过在立即执行函数内部定义私有变量和方法,并将需要对外暴露的变量和方法返回,可以实现模块化的封装和使用。

示例代码:

var module = (function() {var privateVariable = "私有变量";function privateMethod() {console.log("私有方法");}// 对外暴露的变量和方法return {publicVariable: "公共变量",publicMethod: function() {console.log("公共方法");}};
})();console.log(module.publicVariable); // 输出:公共变量
module.publicMethod(); // 输出:公共方法console.log(module.privateVariable); // 输出:undefined
module.privateMethod(); // 报错:module.privateMethod is not a function

在上面的示例中,我们使用立即执行函数表达式定义了一个模块 module。在模块内部,我们定义了私有变量 privateVariable 和私有方法 privateMethod,并将需要对外暴露的变量和方法返回。这样,外部可以访问模块的公共变量和方法,但无法访问私有变量和方法。


立即执行函数表达式的写法和示例代码

基本写法

立即执行函数表达式的基本写法是在函数定义后紧跟一对括号。

示例代码:

(function() {console.log("立即执行函数表达式");
})();

举例说明一下它的用法:

(function() {var count = 0;function increment() {count++;}function getCount() {return count;}window.counter = {increment: increment,getCount: getCount};
})();counter.increment();
console.log(counter.getCount()); // 1

在这个例子中,我们定义了一个立即执行函数表达式,函数内部包含了一个 count 变量和两个函数 incrementgetCount。我们通过 window 对象将 incrementgetCount 方法暴露给外部使用,从而实现了模块的封装和接口的暴露。最后,我们调用 increment 方法增加 count 的值,并调用 getCount 方法获取 count 的值。

传递参数

立即执行函数表达式可以传递参数,实现更灵活的调用方式。

示例代码:

(function(name) {console.log("Hello, " + name + "!");
})("John");

在上面的示例中,我们通过立即执行函数表达式传递了参数 name,并输出了一条消息。

返回值

立即执行函数表达式可以返回一个值,供外部使用。

示例代码:

var result = (function(a, b) {return a + b;
})(1, 2);console.log(result); // 输出:3

在上面的示例中,我们通过立即执行函数表达式返回了两个参数的和,并将结果赋值给变量 result。


总结

立即执行函数表达式是一种在定义后立即执行的函数调用方式。它的特点是函数定义后紧跟一对括号,并且可以传递参数。立即执行函数表达式的应用场景包括封装私有变量和方法、避免全局变量污染和模块化开发。通过立即执行函数表达式,我们可以更好地封装模块内部的实现细节,避免变量和方法的命名冲突,同时也可以避免在全局作用域中定义过多的变量和方法,从而减少全局变量污染和命名空间冲突。

另外,立即执行函数表达式也是一种常用的模块化开发方式,可以将模块的实现代码封装在一个独立的作用域中,从而实现模块的隔离和复用。通过立即执行函数表达式,我们可以将模块的实现代码和接口暴露代码分离开来,从而更好地管理和维护代码。

在这里插入图片描述

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

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

相关文章

pinia下载使用时报错如何解决?

报错 可能是因为pnpm下载的时候版本出现了问题 更新pnpm的版本 一、windowr打开终端 输入pnpm -v检查是否是最新版本 如果是8.6.2的话 就更新 更新步骤如下: 二:打开pnpm下载的网盘位置 我的是在c盘 找到里面的用户文件夹 点击选择dell里面的App data文…

【AI视野·今日Sound 声学论文速览 第二十六期】Mon, 16 Oct 2023

AI视野今日CS.Sound 声学论文速览 Mon, 16 Oct 2023 Totally 7 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Low-latency Speech Enhancement via Speech Token Generation Authors Huaying Xue, Xiulian Peng, Yan Lu现有的基于深度学习的语音增强…

数字孪生技术在智慧城市应用的推进建议

(一)坚持需求牵引,强场景重实效 必须始终坚持以人为本、场景导向、需求牵引,站在供给侧结构性改革的角度,突出以用促建,强调建用并重,真正发挥数字孪生城市应用建设的实效。从构建数字孪生创新…

分布式内存计算Spark环境部署与分布式内存计算Flink环境部署

目录 分布式内存计算Spark环境部署 1. 简介 2. 安装 2.1【node1执行】下载并解压 2.2【node1执行】修改配置文件名称 2.3【node1执行】修改配置文件,spark-env.sh 2.4 【node1执行】修改配置文件,slaves 2.5【node1执行】分发 2.6【node2、no…

Linux知识点 -- 高级IO(二)

Linux知识点 – 高级IO(二) 文章目录 Linux知识点 -- 高级IO(二)一、IO多路转接 -- poll1.poll接口2.poll实现3.poll优缺点 二、IO多路转接 -- epoll1.epoll接口2.epoll的工作原理3.epoll服务器实现4.epoll的优点5.epoll的工作模式…

Django REST Framework完整教程-认证与权限-JWT的使用

文章目录 1.认证(Authentication)与权限(Permission)1.1.视图添加权限1.2.登录验证1.3.常用DRF自带权限类1.4.自定义权限类1.5.全局权限1.6.函数视图权限 2.认证详解2.1.认证方案2.2.如何使用TokenAuthentication? 3.JSON Web Token(JWT)认证3.1.工作原理3.2.安装3.…

Java学习笔记(四)——程序控制结构

一、顺序控制 二、分支控制 (一)单分支 (二)双分支 (三)多分支 (四)嵌套分支 (五)switch分支结构 (六)if和switch的选择 三、循…

Megatron-LM GPT 源码分析(一) Tensor Parallel分析

引用 本文基于开源代码 https://github.com/NVIDIA/Megatron-LM ,通过GPT的模型运行示例,从三个维度 - 模型结构、代码运行、代码逻辑说明 对其源码做深入的分析。 Tensor Parallel源码分析

uniapp(uncloud) 使用生态开发接口详情4(wangeditor 富文本, 云对象, postman 网络请求)

wangeditor 官网: https://www.wangeditor.com/v4/pages/01-%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/01-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8.html 这里用vue2版本,用wangeditor 4 终端命令: npm i wangeditor --save 开始使用 在项目pages > sy_news > add.vue 页面中…

免密码方式获取Hive元数据

前言 开发中可能用到hive的元数据信息 ,如获取hive表列表、hive表字段、hive表数据量大小、hive表文件大小等信息,要想获取hive元数据信息即需要hive元数据库的账号及密码,此次提供的是一种不需要hive元数据库密码及可获取元数据信息的方式,且此种方式是只读 组件:hive …

程序员必备的IP查询工具

shigen坚持日更的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考,不断沉淀和成长。 hello,今天shigen给大家分享一下如何优雅的查询IP的工具。我们先看一下效果&a…

CSS的美化(文字、背景) Day02

一、文字控制属性 分为:字体样式属性 、文本样式属性 1.1 CSS字体样式属性 1.color定义元素内文字颜色2.font-size 字号大小3 font-family 字体4 font-weight 字体粗细5.font-style 字体风格6.font 字体综合属性 1.1.1 > 文字颜色 color 属性名: color color …

序列化和反序列化指令在PLC通信上的应用

在了解本篇博客之前,大家可以熟悉下序列化指令的相关介绍,详细内容如下: 博途PLC 1200/1500 PLC 序列化和反序列化指令编程应用_博图序列化和反序列化-CSDN博客序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输…

在 Python 脚本中设置环境变量

环境变量是与系统进程交互的一种深入方式; 它允许用户获得有关系统属性、路径和已经存在的变量的更详细信息。 我们如何使用环境变量 如上所述,环境变量促使我们与系统进程进行交互。 我们可以使用环境变量来访问系统中的所有变量和键。 为此&#xff…

6 个可解锁部分 GPT-4 功能的 Chrome 扩展(无需支付 ChatGPT Plus 费用)

在过去的几个月里,我广泛探索了 ChatGPT 的所有可用插件。在此期间,我发现了一些令人惊叹的插件,它们改进了我使用 ChatGPT 的方式,但现在,我将透露一些您需要了解的内容。 借助 Chrome 扩展程序,所有 Chat…

Windows:VS Code IDE安装ESP-IDF【保姆级】

物联网开发学习笔记——目录索引 Visual Studio Code(简称“VS Code”)是Microsoft向开发者们提供的一款真正的跨平台编辑器。 参考: VS Code官网:Visual Studio Code - Code Editing. Redefined 乐鑫官网:ESP-IDF…

分类算法-逻辑回归与二分类

1、逻辑回归的应用场景 广告点击率是否为垃圾邮件是否患病金融诈骗虚假账号 看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器。 2、 逻辑回归的原理 2.1 输入 逻辑回归的输入就是一个线性…

python二次开发CATIA:CATIA Automation

CATIA 软件中有一套逻辑与关系都十分严谨的自动化对象,它们从CATIA(Application)向下分支。每个自动化对象(Automation Object,以下简称Object)都有各自的属性与方法。我们通过程序语言调用这些 Object 的属性与方法,便…

C语言 内存

内存分配 内存分配的类型 C/C中内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配:编译时分配,包括全局、静态全局、静态局部三种变量。 动态内存分配:运行时分配,包括栈&#x…