Javascript 立即执行函数

news2024/11/15 7:15:38

IIFE,一般称为立即执行函数。你可能会问我,*“嘿!我知道正常的函数表达式是什么样子的,但是 IIFE 到底是什么?”。*好吧,这正是我今天要在本文中回答的问题。

函数表达式

在了解立即调用函数表达式之前,让我们快速回顾一下 JavaScript 中的普通函数表达式是什么样的。

function(){
 return ;
}

这就是我们通常在 JavaScript 中编写函数的方式。function关键字,然后是函数名称,然后是函数体。

在ES6之后,我们还可以编写箭头函数,以及将箭头函数赋值给变量。

ArrowFn(()=>{

})
let ArrowFn=()=>{
}

通过上面的小例子,快速回顾了普通函数以及箭头函数的编写方式。下面我们介绍立即执行函数

重要的部分来了,为了调用上面的方法我们会怎么调用?你需要在任何你想要的地方显式地调用它。事实上,这就是我们首先编写普通函数表达式的主要原因。

ArrowFn()

立即执行函数

现在,我们了解了普通函数表达式在 JavaScript 中是如何工作的,让我们慢慢转向 IIFE。让我们尝试理解短语Immediately Invoked Functional Expressions。它的意思是:

立即调用:立即调用的东西。

函数表达式:到目前为止,我们已经研究过它们!

如果我们了解整个情况:

IIFE(立即调用函数表达式)是一个 JavaScript 函数,它在定义后立即运行。-MDN

所以,我们不需要显式调用这个函数来调用/运行它。它会在调用 JavaScript 文件后立即运行。IIFE 看起来像这样:

(function(){
 这里是函数体
})()

代码4.png

如果我们看语法本身,我们有两对闭括号,第一对包含要执行的逻辑,第二个通常是我们调用函数时包含的内容,第二个括号负责告诉编译器函数表达式必须立即执行。

以下是将普通函数转换为 IIFE 的方法

function consoleName(){

	console.log('hello 哈哈哈')
}
consoleName()


(function(){console.log('hello 哈哈哈')})()

请注意,我们不需要对 IIFE 的显式调用。此外,这些只是匿名函数,因为它们不需要函数名。如果你愿意,你也可以给它命名。它们甚至也可以是箭头函数!

当然了,立即执行也接受参数,下面是一个小栗子:

function consoleName(name){

	console.log('hello '+ name)
}
consoleName('哈哈哈')


(function(name){console.log('hello '+name)})("哈哈哈")

IIFE 的特征/行为

  • IIFE 像 JavaScript 中的任何其他函数/变量一样遵循自己的范围。立即调用的名称部分有时会使新开发人员感到困惑,因为他们希望 IIFE 执行而与函数范围无关,这是错误的。例如,让我们看下面的示例,其中 IIFE 是在函数中定义的,并且只有在我们调用父函数时才会立即调用。

    function fn(){
    	console.log("A");
    	(()=>{
    		console.log("B")
    	})()
    	console.log("C")
    }
    

    输出结果是A B C

  • 与其他函数类似,IIFE 也可以命名或匿名,但即使 IIFE 确实有名称,也不可能引用/调用它。

  • IIFE 有自己的范围,即您在函数表达式中声明的变量在函数之外将不可用。

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

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

相关文章

栈与队列-算法总结

目录 基础知识 用栈实现队列 用队列实现栈 栈的拿手好戏 删除字符串中的所有相邻重复项 逆波兰表达式求值 滑动窗口最大值 前k个高频元素 基础知识 栈队列stackqueue先进后出先进先出无迭代器无迭代器容器设配器容器设配器vector deque listvector deque list C标准库版本…

“dv/dt”和“di/dt”值:这些值的水平对固态继电器有什么影响?

di/dt水平过高是晶闸管故障的主要原因之一。发生这种情况时,施加到半导体器件上的应力会大大超过额定值并损坏功率元件。在这篇新的博客文章中,我们将解释dv/dt和di/dt值的重要性,以及为什么在为您的应用选择固态继电器之前需要考虑它们。 让…

VMware虚拟机安装Win11最详细过程以及遇到的这台电脑无法运行Windows11的问题

准备工作 在使用VMware虚拟机安装Win11之前我们先把准备工作做好,以免后续思绪混乱导致出错。 1. 到VMware官网或点击链接下载正版VMware Workstation 16 Pro。 2. 双击打开安装包,点击下一步。 3. 阅读用户许可协议,勾选我接受许可协议中的…

k8s-二进制部署

文章目录一、环境二、步骤1、安装cfssl工具2、部署etcd集群3、在node节点安装docker组件4、安装flannel组件部署master节点组件部署node节点部署kube-proxy组件三、测试一、环境 角色服务器地址组件master192.168.174.140kube-apiserver,kube-controller-manager&a…

外包出来,朋友内推我去一家公司,问的实在是太...

外包出来,没想到算法死在另一家厂子,自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有…

2023赏金计划:Coremail SRC漏洞征集与样本奖励火热进行中

赏金活动一:Coremail SRC漏洞奖励计划 01 活动背景 2023年1月,Coremail安全应急响应中心(Coremail SRC)正式上线启用,面向公众收集安全漏洞信息与安全情报。Coremail SRC旨在联合众多安全专家、白帽子研究员共同发现…

MySQL 运算符及优先级

MySQL 运算符 MySQL 主要有以下几种运算符: 算术运算符比较运算符逻辑运算符位运算符算术运算符 MySQL 支持的算术运算符包括: 运算符作用加法-减法*乘法/ 或 DIV除法% 或 MOD取余 在除法运算和模运算中,如果除数为0,将是非法除数&#x…

分布式事务几种方案

1)、2PC 模式 数据库支持的 2PC【2 phase commit 二阶提交】,又叫做 XA Transactions。 MySQL 从 5.5 版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持。 其中,XA 是一个两阶段提交协议,该协议…

推荐系统[八]算法实践总结V1:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】

0.前言:召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回、粗排、精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板;粗排是初筛,一般不会上复杂模型;精排是整个推荐环节的重中之重,在特征和模型上都会做的比较复杂;重排,一般是做打散或满足…

Windows 服务器IIS安装,服务器多界面设置方法

当你在使用服务器时是否有遇到这样一个问题?当你正在服务器里进行工作时,突然一个小伙伴在没有告知你的情况下进入了服务器里,导致你服务器失去连接了,这种情况是非常常见的现象。 主要原因就是因为服务器没有安装多界面&#xf…

k8s多节点二进制部署以及Dashboard-UI

一.多Maser集群架构的了解Kubernetes作为容器集群系统,通过健康检查重启策略是实现Pod故障自我修复能力,通过调度室实现Pod分布式部署,并保持预期副本数,根据Node失效状态自动在其他Node拉起Pod,实现了应用层的高可用。…

KUKA机器人_示教器的基本组成结构和功能介绍

KUKA机器人_示教器的基本组成结构和功能介绍 如何操作KUKA机器人? 通过KUKA机器人的手持操作器(KUKA smartPAD),或者叫示教器。 如下图所示, 可以通过示教器的各种按键菜单和触摸屏(手、触摸笔)来操作示教器。 下面对于示教器上的按键菜单的功能进行详细的说明: …

契约开发、测试你知多少?

契约维护的难题 如今微服务凭借其灵活、易开发、易扩展等优势深入人心,不同服务之间的集成和交互日渐繁多且复杂。这些服务之间交互的方式是多样的,常见的有 HTTP 请求和消息队列。在它们交互的过程中,会有服务的版本演进,交互信…

Mysql架构与内部模块

Mysql架构与内部模块 演示环境: MySQL 5.7 存储引擎:InnoDB 一、一条查询SQL是如何执行的? 程序或者工具要操作数据库,第一步跟数据库建立连接。 1、通信协议 首先,MySQL 必须要运行一个服务,监听默认的…

vue - vue中对Vant日历组件(calendar)的二次封装

vue中对vant日历选择器组件实现的的二次封装;主要实现功能如下: 主要功能: 日期区间选择(基本);自定义选择器的底部按钮,添加清除时间操作(slot插槽);指定默认选中的日期…

一种图片展示的完美方案,图片展示,object-fill

通常一般的处理 <style>.img-container {width: 300px;height: 200px;background: #f60;}img {width: 100%;height: 100%;}</style> </head> <body><div class"img-container"><img src"./行道树.png" alt""&g…

Java之JVM性能初探

一、JVM简介jvm是一种用于计算设备的规范&#xff0c;它是一个虚构出来的机器&#xff0c;是通过在实际的计算机上仿真模拟各种功能实现的。jvm包含一套字节码指令集&#xff0c;一组寄存器&#xff0c;一个栈&#xff0c;一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作…

AWS攻略——使用Public NAT解决私有子网实例访问互联网

文章目录创建NAT网关编辑Private子网路由测试知识点参考资料在《AWS攻略——子网》一文中&#xff0c;我们分别创建了一个Public子网和一个Private子网&#xff0c;并让Public子网中的实例可以SSH登录到Private子网的实例中。 现实场景中&#xff0c;我们可能存在如下需求&…

正版授权的商业级智慧校园源码 SaaS模式带小程序端

一套针对中小学校园研发的商业级智慧校园源码&#xff0c;系统功能强大&#xff0c;代码完整&#xff0c;源码有演&#xff0c;正版授权。 私信了解更多&#xff01; 一、智慧校园系统构成&#xff1a; 1、 SaaS云平台 2、 智慧校园管理平台 3、 小程序教师端 4、 小程序家…

【一文带你看懂什么是VLAN、网关、DNS和子网掩码等 】

很多小伙伴多次问到什么是VLAN、三层交换机、网关、MAC地址、DNS和子网掩码&#xff0c;它们具体的定位和用途。确实&#xff0c;如今网络技术已经覆盖了非常广阔的工作和生活场景&#xff0c;但很多人在日常的应用当中还是不太懂这些知识&#xff0c;今天我们就尝试用比较通俗…