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

news2024/10/13 6:14:22

在这里插入图片描述

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

文章目录

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

前言

在 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.coloradmin.cn/o/1108541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次mysql事务并发优化

记一次mysql事务并发优化 背景 事情的情况大致是这样的。一个扣减库存的业务上线以后,隔几天会报一次错,错误内容如下: ERROR - exception: UncategorizedSQLException,"detail":"org.springframework.jdbc.UncategorizedSQ…

《向量数据库指南》——AutoGPT 宣布不再使用向量数据库

生成式 AI 促进了向量数据库的火爆,但如今的技术风向变化似乎也挺快。作为全球最著名的 AI 项目之一,AutoGPT 宣布不再使用向量数据库,这一决定可能让不少人感到惊讶。毕竟从一开始,向量数据库就一直协助管理着 AI 智能体的长期记忆。 那么这个基本设计思路怎么就变了?又…

核酸管外观缺陷检测(二)

1.1应用示例思路 (1)创建分类器; (2)向分类器中添加样本; (3)训练分类器; (4) 测试数据,并将检测结果写入txt文件中。 1.2 应用示例相关算子介绍 (1) create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunctio…

C#,数值计算——KMeans分类的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// K-Means classification /// </summary> public class Kmeans { private int nn { get; set; } private int mm { get; set; } private …

ACL配置

目录 1.使用基本ACL配置交换telnet访问的权限 2.使用高级ACL配置流分类实现限制互访某一台服务器 3.使用二层ACL配置流分类拒绝指定报文通过 4.通过流策略实现策略路由(重定向到不同的下一跳) 5.通过流策略实现不同网段间限制互访 6.通过流策略实现限速功能 7.通过流策略…

C# CodeFormer Colorization 人脸着色

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace CodeFormer_D…

联合体(共用体)

1. 联合类型的定义 联合也是一种特殊的自定义类型。 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间。 2.联合大小的计算 联合的大小 至少是最大成员的大小 。 当最大成员大小不是最大对齐数的整数倍的时候&#xff0c;就要对 齐到最大对齐数…

反射、代理模式、注解

目录 一.Java反射 1.1反射的第一步&#xff1a;获取Class类的对象 1.2使用反射获取构造器对象并使用 1.3使用反射获取成员变量对象并使用 1.4使用反射获取成员方法对象并使用 二.代理模式 2.1概述 2.2代理模式在Java中的应用 2.3静态代理 2.4动态代理 2.4.1JDK动态代…

第60节——使用redux-toolkit实战一个商品列表的增删查改

一、样例 二、需求 调用goods.js这个单例完成对goods数据的增删查改 class Goods {constructor() {const data localStorage.getItem("qf-goods-data");this.goods data ? JSON.parse(data) : [];}time 500;/*** 获取商品* returns*/getGoods() {return new Pr…

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

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

Apache Doris (四十四): Doris数据更新与删除 - Delete 数据删除

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

在 Python 脚本中设置环境变量

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

Spring中构造注入详解

目录 一、构造注入是什么 二、构造注入重载 一、构造注入是什么 书接上回&#xff0c;我们已经知道了setter注入是什么了&#xff0c;这里的构造注入也就很好理解了。构造注入也就是Spring通过调用类对象中的构造方法来进行注入。接下来利用代码演示构造注入 1&#xff09;先…

Elasticsearch系列组件:Beats高效的日志收集和传输解决方案

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎&#xff0c;设计用于云计算环境中&#xff0c;能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性&#xff0c;可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走&#xff0c;深成指、创业板指均跌超1%&#xff0c;双双创出年内新低。转基因概念股逆势大涨…

C语言初学者工具选择:vscode + MSYS2 + cmake 搭建 C环境

文章目录 前言1. MSYS2 安装1. 下载安装包2. 安装3. pacman 换清华大学源4. 安装 mingw-w64 toolchain 和 cmake ninja5. 将 toolchain 加入系统环境变量 2. 设置 vscode1. 必要的插件2. 一个简单的 vscode cmake 项目 最后C数据结构与算法CMake 前言 网上关于使用 vscode 配…

Leetcode刷题详解——无重复字符的最长子串

1. 题目链接&#xff1a;3. 无重复字符的最长子串 2. 题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所…

C++11(包装器)

目录 一、function包装器 1、概念 2、function的引入 3、function 1、对函数指针包装 2、对函数对象进行包装 3、对lambda表达式进行包装 4、对类的成员函数进行包装 二、bind包装器 1、概念 2、bind 1、绑定全局函数 2、绑定成员函数 3、参数调换顺序 一、functi…

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

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

C语言 内存

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