没想到的 IIFE

news/2024/4/19 7:21:32/文章来源:https://blog.csdn.net/qq_41800366/article/details/129244799

没想到的 IIFE

有时候我们想要立即执行一下所定义的函数,可以怎么做呢?

function foo(num) {return num ?? 1;
}foo();

写完然后调用对吧,这是可以的,但你有没有觉得这其实有点脱裤子放屁了,完全可以直接调用就是了对吧,也就是 IIFE(Immediately-Invoked Function Expression),立即执行函数表达式

(function foo() {return num ?? 1;
})()

有人说, IIFE 很简单呀,还需要你写文章吗?如果我是要写怎么使用 IIFE,当然没必要,我写这个,是因为我发现了一点有趣的东西。

什么呢?我们先来看三段语句:

function foo() {return num ?? 1;
}()
function foo(num) {return num ?? 1;
}(2)
(function foo(num) {return num ?? 1;
}());

你觉得上面这些能执行成功吗?

不是想考哈,考这个太没意思了,主要就是探究一下

是不是不知道了哇,先不要慌,我们从头看:

function foo(num) {return num ?? 1;
}foo();

从这里是不是可以看出,只要在函数名后面加上圆括号,就能调用(执行)函数了。那么我们可以大胆的猜测,直接在函数后面添加括号是不是也可以执行呢?

我们来看看呢?

function foo(num) {return num ?? 1;
}();	
// SyntaxError: Unexpected token ')'

执行直接会报语法错误,为什么呢?因为:

  1. function foo(num) {...} 是一段语句(函数声明语句)
  2. 放在语句后的括号与前面的语句完全分开,只是一个分组运算符(用作控制计算优先级的手段),此时的括号里面需要包含一个表达式。

那么,下面这段代码的结果就不言而喻了

function foo(num) {return num ?? 1;
}(2)

既不会报错,也不会执行 foo,因为 (2) 和前面的语句是完全分开的。

那再来看第三段:

(function foo(num) {return num ?? 1;
}());

这就能正常执行了,为什么呢?

因为:

  1. 括号里面的内容都会识别为表达式
  2. 放在表达式后的括号表明该表达式是要调用的函数

当然,下面这种也是能正常工作的,左侧括号使一个表达式。

(function foo(num) {return num ?? 1;
})();

我想,看到这里,你应该知道为啥在文章开头我要将 “立即执行函数表达式” 中的函数表达式标红了吧,这里也纠正一个常犯的错误:IIFE 可不是一个函数,而是一个表达式哟!

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

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

相关文章

(四)K8S 安装 Nginx Ingress Controller

ingress-nginx 是 Kubernetes 的入口控制器,使用NGINX作为反向代理和负载均衡器 版本介绍 版本1:Ingress NGINX Controller(k8s社区的ingres-nginx) 以 NGINX 开源技术为基础(kubernetes.io),可在GitHub的 kubernet…

记一次java.lang.ClassNotFoundException问题排查过程

记一次java.lang.ClassNotFoundException问题排查过程 同事提供一个or-simulation-engine.jar包(非maven项目,内部依赖很多其他jar,这个包是手动打出来的)给我,我集成到我的springboot项目中,在本地IDEA启…

Telnet 基础实验1: Telnet 实验

Telnet 基础实验1: Telnet 实验 拓扑图 配置命令 R1 的配置 undo ter mo sys sys R1 interface g0/0/0 ip address 192.168.1.1 255.255.255.0 qR2 的配置 undo ter mo system-view sysname R2 interface g0/0/0 ip address 192.168.1.2 255.255.255.0 q两台设…

day21_IO

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、File 三、IO流 四、字节输入&输出流 零、 复习昨日 见晨考 一、作业 见答案二、File 2.1 介绍 File,通过一个路径代表文件或者文件夹 …

mysql(一) 使用注意事项及优化

初学mysql的时候、写了一份 "什么是CRUD? CRUD的操作" 的文章(18年的) 我开心看到有朋友经常在下面讨论一些问题、 但是以现在(今天 23年)回头看觉得 那些只是入门需要知道和掌握的、也刚好最近不是很忙 所…

区块链行业遭供应链攻击,上万加密钱包被“抄底”损失上亿美元

当地时间8月2日晚间, 区块链行业遭遇了一次行业重创 。据科技媒体TechCrunch报道, 若干名攻击者“抄底”了上万个加密钱包,钱包内有价值上亿美元的代币。 据了解遭受攻击的加密钱包包括Phantom、Slope和TrustWallet等。涉及到的币种除了SOL、…

网上招聘系统

技术:Java、JSP等摘要:当今,人类社会已经进入信息全球化和全球信息化、网络化的高速发展阶段。丰富的网络信息已经成为人们工作、生活、学习中不可缺少的一部分。人们正在逐步适应和习惯于网上贸易、网上购物、网上支付、网上服务和网上娱乐等…

为什么文档对 SaaS 公司至关重要?

在过去十年左右的时间里,SaaS的兴起使全球数百家公司成为家喻户晓的公司。但他们并不是仅仅依靠产品的力量到达那里的。客户服务和支持是使一切在幕后顺利进行的原因——其中很大一部分是文档。以正确的风格和正确的位置在您的网站上找到适当的用户文档对于将浏览器…

RNN相关知识总结

目录RNN结构与原理1.模型总览2.反向传播LSTM结构与原理1.模型总览2.如何解决RNN梯度消失/爆炸问题?GRU结构及原理1.模型总览LSTM与GRU的区别RNN结构与原理 1.模型总览 上图是RNN的展开结构图,由输入层、隐藏层和输出层组成。当前时间步t 的隐藏状态hth_…

【神经网络】Transformer基础问答

1.Transforme与LSTM的区别 transformer和LSTM最大的区别就是LSTM的训练是迭代的,无法并行训练,LSTM单元计算完T时刻信息后,才会处理T1时刻的信息,T 1时刻的计算依赖 T-时刻的隐层计算结果。而transformer的训练是并行了&#xff0…

快速找到外贸客户的9种方法(建议收藏)

所有外贸企业想要做好外贸出口的头等大事,就是要快速的找到优质的外贸客户和订单,没有订单的达成,所有的努力都是图劳,还有可能会陷入一种虚假的繁荣,每天都很忙,但是没有结果。今天,小编就来分…

第一章 1:函数

函数概念 函数我们可以简单的理解为一个自变量只对应一个函数值,如图: 如图所示的图像,我们可以把其理解为函数,那非函数呢? 这个就叫做非函数,因为我们的一个自变量对应了两个函数值。 函数的两要素&…

极智项目 | 实战pytorch arcface人脸识别

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍 实战pytorch arcface人脸识别,并提供完整项目源码。 本文介绍的实战arcface人脸识别项目,提供完整的可以一键训练、测试的项目工程…

不怕被AirTag跟踪?苹果Find My技术越来越普及

苹果的 AirTag 自推出以来,如何有效遏制用户用其进行非法跟踪,是摆在苹果面前的一大难题。一家为执法部门制造无线扫描设备的公司近日通过 KickStarter 平台,众筹了一款消费级产品,可帮助用户检测周围是否存在追踪的 AirTag 等设备…

【2023全网最全教程】从0到1开发自动化测试框架(建议收藏)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏;其次,代码模块常改动,回归测试很频繁,测试重复低效;最后&#x…

小米无线AR眼镜探索版细节汇总

在MWC 2023期间,小米正式发布了一款无线AR眼镜,虽然还没看过实机,但XDA提前上手体验,我们从中进行总结。首先我要说的是,小米这款眼镜和高通无线AR眼镜参考设计高度重叠,产品卖点几乎一致,只是增…

微服务框架-学习笔记

1 微服务架构介绍 1.1 系统架构演变历史 单体架构垂直应用架构:按照业务线垂直划分分布式架构:抽出业务无关的公共模块SOA架构:面向服务微服务架构:彻底的服务化1.2 微服务架构概览 1.3 微服务架构核心要素 服务治理&#xff1…

观测云产品更新|新增用户访问监测自动化追踪;新增 CDN 质量分析;新增自定义查看器导航菜单等

观测云更新 用户访问监测优化 新增用户访问监测自动化追踪 用户访问监测新增自动化追踪,通过“浏览器插件”的实现方式,使用浏览器记录用户访问行为,创建无代码的端到端测试。更多详情可参考文档【 自动化追踪 】https://docs.guance.com/…

SpringBoot整合XxlJob

SpringBoot整合XxlJob 1.XxlJob简介 官方网址:https://www.xuxueli.com/xxl-job XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 为什么要使…

Macbook M1 安装PDI(Kettle) 9.3

Macbook M1 安装PDI(Kettle) 9.3 当前 PDI(Kettle)最新版为9.3,依赖Java JDK 11。因为没有专门用于 M1的程序,需要下载并安装x86_64架构的JDK及依赖软件,并 “强制在Intel模式下运行shell” 的方式来实现 Kettle 的正…