没想到的 IIFE
没想到的 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 ')'
执行直接会报语法错误,为什么呢?因为:
function foo(num) {...}
是一段语句(函数声明语句)- 放在语句后的括号与前面的语句完全分开,只是一个分组运算符(用作控制计算优先级的手段),此时的括号里面需要包含一个表达式。
那么,下面这段代码的结果就不言而喻了
function foo(num) {return num ?? 1;
}(2)
既不会报错,也不会执行 foo
,因为 (2)
和前面的语句是完全分开的。
那再来看第三段:
(function foo(num) {return num ?? 1;
}());
这就能正常执行了,为什么呢?
因为:
- 括号里面的内容都会识别为表达式
- 放在表达式后的括号表明该表达式是要调用的函数
当然,下面这种也是能正常工作的,左侧括号使一个表达式。
(function foo(num) {return num ?? 1;
})();
我想,看到这里,你应该知道为啥在文章开头我要将 “立即执行的函数表达式” 中的函数表达式标红了吧,这里也纠正一个常犯的错误:IIFE 可不是一个函数,而是一个表达式哟!
相关文章:
没想到的 IIFE
没想到的 IIFE 有时候我们想要立即执行一下所定义的函数,可以怎么做呢? function foo(num) {return num ?? 1; }foo();写完然后调用对吧,这是可以的,但你有没有觉得这其实有点脱裤子放屁了,完全可以直接调用就是了…...
「牛客网C」初学者入门训练BC156
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...

【Proteus仿真】【STM32单片机】粮仓温湿度控制系统设计
文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用声光报警模块、LCD1602显示模块、DHT11温湿度模块、继电器模块、加热加湿除湿风扇等。 主要功能: 系统运行后,LCD1602显示…...

九年时间,倾情投入,JumpServer开源堡垒机v3.0正式发布
2023年2月27日,JumpServer开源堡垒机正式发布v3.0版本。在JumpServer开源堡垒机v3.0版本的设计过程中,我们始终秉持着“内外兼修”的原则,旨在进一步提升用户的使用体验,真正用心做好一款开源堡垒机。 在JumpServer v3.0版本中&…...
【ROS学习笔记5】服务通信
【ROS学习笔记5】服务通信 文章目录【ROS学习笔记5】服务通信前言一、服务通信的理论模型二、服务通信自定义srv三、服务通信自定义srv的Cpp实现四、服务通信自定义srv的Python实现五、Reference写在前面,本系列笔记参考的是AutoLabor的教程,具体项目地址…...

“华为杯”研究生数学建模竞赛2006年-【华为杯】A题:Ad Hoc 网络中的区域划分和资源分配问题(附获奖论文)
赛题描述 Ad Hoc网络是当前网络和通信技术研究的热点之一,对于诸如军队和在野外作业的大型公司和集团来说,Ad Hoc网络有着无需基站、无需特定交换和路由节点、随机组建、灵活接入、移动方便等特点,因而具有极大的吸引力。 在Ad Hoc网络中,节点之间的通信均通过无线传输来完…...
编写第一个JAVA程序,常见踩坑记录
编写第一个JAVA程序 预备环境 电脑需要安装JDK 及 配置环境变量打开cmd 输入java -version 能运行在说 创建工程 创建文件夹javaCode(随意叫…) 创建文件Hello.java 编写代码 public class Hello{public static void main(String[] args){System.out.print("hello wo…...

求职陷阱:Lazarus组织以日本瑞穗銀行等招聘信息为诱饵的攻击活动分析
概述 Lazarus组织是疑似具有东北亚背景的APT组织,奇安信威胁情报中心内部追踪编号为APT-Q-1,因2014年攻击索尼影业开始受到广泛关注,其攻击活动最早可追溯到2007年。该组织早期主要针对其他国家政府机构,以窃取敏感情报为目的&am…...

【C语言每日一题】判断字符串旋转结果(附加字符串左旋详解)
【C语言每日一题】—— 判断字符串旋转结果😎😎😎 目录 💡前言🌞: 💛字符串左旋题目💛 💪 解题思路的分享💪 😊题目源码的分享…...
SpringSecurity+JWT+Redis进行用户鉴权和接口权限的控制
系统的登录,都做些什么?用户访问登录页时:会发起一个获取图片验证码的请求,后端先生成一个uuid代表此次的验证码,接着生成 "ab?答案" 的表达式,将前面的内容转换成流生成图片,后面的答案则存储到…...

七大排序(Java)
目录 一、插入排序 1. 直接插入排序 2. 希尔排序 二、选择排序 1. 直接选择排序 2. 堆排序 三、交换排序 1. 冒泡排序 2. 快速排序 四、归并排序 五、总结 一、插入排序 1. 直接插入排序 抓一张牌,在有序的牌中,找到合适的位置并且插入。 时间…...
分享一些可以快速掌握python语法的小技巧
下面是我总结的一些有助于快速掌握 Python 语法的小技巧,欢迎一起交流。 注释:在代码中添加注释可以帮助你和其他人理解代码的目的和功能。在 Python 中,使用 # 符号来添加单行注释,使用三引号 """ 或 来添加多行…...

1.FFmpeg-音视频基础
专栏介绍基于最新的FFmpeg5.1.2版本讲解学习, 跟随博主一起学习ffmpeg: 本专栏学习流程为: FFmpeg安装、...

Parasoft的自动化测试平台到底强在哪?
在如今产品迭代如此之快的大背景下,软件测试这项工作越来越被大家所重视,但是通常情况下大家都是选择在产品上线前再去做测试,这个时候就会面临很多麻烦和挑战。首先,产品已经开发好之后,体量比较大,要从哪…...

FastDDS-0.简介
FastDDS简介 eProsima Fast DDS 是 DDS (Data Distribution Service) 协议的一个C语言实现版本,该协议由 Object Management Group (OMG) 组织定义。 eProsima Fast DDS 库既提供了一个应用编程接口(API),又提供了一种通信协议&a…...

Flutter入门进阶之旅 -开源Flutter项目
开源Flutter项目 该项目为纯flutter端项目,采用aar方式寄生在原生APP中,作为APP中的一个独立模块 在业务逻辑上做到与原生APP完全隔离,Flutter端开发者,可完全不用关注原生端的业务模块 两端开发彼此业务隔离,缩小了对…...

Opencv项目实战:21 美国ASL手势识别
0、项目介绍 首先,我可以保证在这里,你并不需要多么了解深的机器学习算法,我的初衷是通过本项目,激发大家学习机器学习的动力。选择这种手势原因是因为只有24个字母,你的电脑足以带的动,虽然我只训练A、B、…...

强化学习RL 01: Reinforcement Learning 基础
目录 RL理解要点 1. RL数学基础 1.1 Random Variable 随机变量 1.2 概率密度函数 Probability Density Function(PDF) 1.3 期望 Expectation 1.4 随机抽样 Random Sampling 2. RL术语 Terminologies 2.1 agent、state 和 action 2.2 策略 policy π 2.3 奖励 reward …...

C语言之练习题合集
💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 文章目录leetcode 题号:728. 自除数leetcode 题号:238.…...

sublimeText3新建文件自动添加注释头
参考: https://github.com/shiyanhui/FileHeader/blob/master/README.rst https://packagecontrol.io/packages/FileHeader https://github.com/shiyanhui/FileHeader fileheader:https://codeload.github.com/shiyanhui/FileHeader/zip/refs/heads/m…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...