JS中[感叹号]function(){}()的理解

2023-05-16

这种写法,是一种`立即执行函数`的写法,即IIFE等设计模式。这种函数在函数定义的地方就直接执行了。

理解IIFE设计模式的关键是要认识到,在ES6之前,JavaScript仅具有函数作用域(因此缺少块作用域),并通过闭包内部的引用传递值。ES6之后情况已不再如此,因为JavaScript的ES6版本使用let和const关键字实现了块作用域。

(function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环境,增加代码的兼容性。

(function(){})是一个标准的函数定义,但是没有赋值给任何变量。所以是没有名字的函数,叫匿名函数。没有名字就无法像普通函数那样随时随地调用了,所以在他定义完成后就马上调用他,后面的括号()是运行这个函数的意思。

如下几种写法作用是相同的:

!function () { /* ... */ }();
~function () { /* ... */ }();
-function () { /* ... */ }();
+function () { /* ... */ }();
void function () { /* ... */ }();
(function (){/*...*/}());
(function (){/*...*/})();

所以: !function(){}写法和(function(){})()是相同的

!function(){}()

1.函数后的();表示要执行这个函数;

2.而();要求前面必须是一个表达式。(最后有js表达式的定义)。

3.所以"!"的作用是将function(){}函数体转为一个函数表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS中[感叹号]function(){}()的理解 的相关文章

  • 为什么这个函数要用括号括起来,后面还要加上括号? [复制]

    这个问题在这里已经有答案了 我一直在 javascript 源代码中看到这一点 但我从未真正找到使用此构造的真正原因 为什么需要这个 function stuff 为什么这样写呢 为什么不直接使用stuff本身而不是在函数中 编辑 我知道这
  • 在 Haskell 中,如何将嵌套上下文中的函数“应用”到上下文中的值?

    nestedApply Applicative f Applicative g gt g f a gt b gt f a gt g f b 正如类型所示 如何获得 a gt b 应用于那个a在上下文中f 感谢帮助 这是关注类型很有帮助的情况
  • 如何在运行时找到当前函数的名称?

    在使用又大又丑的 MFC ASSERT 宏多年之后 我终于决定放弃它并创建终极的 ASSERT 宏 我可以很好地获取文件和行号 甚至失败的表达式 我可以显示一个消息框 其中包含中止 重试 取消按钮 当我按下 Retry 时 VS 调试器会跳
  • 将类型信息传递给 Scala 中的函数

    我有对 json 对象执行一些常见操作的代码 即提取 所以我想创建一个通用函数 它接受哪个类的类型参数 代码如下所示 def getMessageType T json JValue Either GenericError T try Ri
  • 跨 HTML 窗口调用 Javascript 函数

    根据this https stackoverflow com questions 87359 can i pass a javascript variable to another browser window页面我应该能够调用子窗口的参数
  • 我可以向函数添加属性以防止重入吗?

    目前 我有一些如下所示的功能 private bool inFunction1 false public void function1 if inFunction1 return inFunction1 true do stuff whic
  • 在 R 中使用整数值代替数值(例如 1L 与 1)作为常量的好处

    在 R 源代码中 大多数 但不是全部 函数使用整数值作为常量 colnames lt function x do NULL TRUE prefix col if is data frame x do NULL return names x
  • 在 SQLServer 2005 函数中执行动态 SQL

    我在回答这个问题时会说 我不认为这是可以解决的 我还有一个解决方法 我可以创建一个带有输出的存储过程来完成此操作 使用函数对需要此校验和的部分进行编码会更容易 该代码将不起作用 因为Exec SP ExecuteSQL SQL来电 有人知道
  • 为什么这个函数不是纯粹的?

    在维基百科文章中https en wikipedia org wiki Pure function Impure functions https en wikipedia org wiki Pure function Impure func
  • Excel VBA 中.Delete 和.Clear 的区别?

    有什么区别Worksheets 1 Cells Delete and Worksheets 1 Cells Clear 我问这个是因为我一直用 Clear清除我的工作表内容 但在我之前的帖子中我发现Worksheets 1 Cells De
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • R:如何应用输出多列数据帧的函数(使用 dplyr)?

    我想查找数据框中某一特定列与所有其他列之间的相关性 p 值和 95 CI broom 包提供了一个示例 说明如何使用带有 dplyr 和管道的 cor test 在两列之间执行此操作 对于 mtcars 和 mpg 列 我们可以与另一列进行
  • 将数组传递给函数 - 指针与引用(C++ 与 C)

    我有一个关于将数组传递给函数的最佳实践的广泛问题 因此 过去当我用 C 语言编程时 我想要一个函数的输入是一个数组 我会声明该函数的输入参数是一个指针 这效果相对较好 然而 我已经开始更多地使用 C 进行编程 并试图确定将数组传递到函数中的
  • putc 和 ungetc 和有什么区别?

    int ungetc int c FILE fp 将字符 c 推回 fp 并返回 c 或EOF对于一个错误 其中 intputc int c FILE fp 将字符 c 写入文件 fp 并返回写入的字符 或者EOF对于一个错误 这些是 K
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 如何在button.addTarget操作中发送多个按钮?斯威夫特3

    如何将button和button2发送到我的pressButton2函数中 当用户触摸按钮2时 我需要更改按钮和按钮2的颜色 当我的 button2 addTarget 看起来像这样时 我收到错误 表达式列表中存在预期表达式 import
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah

随机推荐

  • SDIO读写SD卡速度有多快?

    前两天测试了SPI方式读写SD卡的速度 SPI方式读写SD卡速度测试 xff0c 今天来测试一下SDIO方式的读写速度 测试条件 xff1a 单片机 xff1a STM32F407VET6 编译环境 xff1a MDK 5 30 43 HA
  • STM32CubeMx+HAL库实现USB CDC+MSC复合设备

    之前的文章中介绍过STM32的USB应用 xff0c 包括虚拟串口 xff08 CDC xff09 和大容量存储设备 xff08 MSC xff09 今天来介绍USB实现CDC和MSC复合设备的方法 硬件 xff1a STM32F407VE
  • 基于STM32CubeMx的USB CDC+MSC复合设备

    之前的文章中介绍过STM32的USB应用 xff0c 包括虚拟串口 xff08 CDC xff09 和大容量存储设备 xff08 MSC xff09 今天来介绍USB实现CDC和MSC复合设备的方法 硬件 xff1a STM32F407VE
  • go标准库httputil.ReverseProxy简单介绍和使用避坑

    很久没水博客了 xff0c 今天就来水一篇 xff0c 说说go标准库的httputil ReverseProxy httputil ReverseProxy顾名思义 xff0c http的反向代理 xff0c 可以类比nginx的反向代理
  • (二)Ardupilot软件分析及代码架构

    先要搞明白ardupilot是怎么实现飞行控制的 xff1f 然后再看文件 1 建立两个基本坐标系 xff1a 地理坐标系和载体坐标系 xff0c 保证两个基本坐标系的正确转化 一般使用旋转矩阵实现坐标系转换 xff1a 四元数运算 q01
  • STM32F103 实例应用——实现透传转发串口

    一 预期准备 实现机制 xff1a 空闲中断 43 DMA中断接收不定长串口数据 开发工具 xff1a STM32F103芯片 xff0c keil5 xff0c usb转ttl工具 预计实现效果 xff1a 串口1接收数据然后透传给串口2
  • 解决:ORA-06550 字符串长度限制在范围 (1...32767)

    错误信息 ORA 06550 第 1 行 第 782 列 PLS 00215 字符串长度限制在范围 1 32767 解决 本例是配置存储过程job的job action 61 gt 39 Declare FLAG Number 20 FAI
  • gcc、make、makefile、cmake、cmakelists区别

    转自 xff1a http www zhihu com question 36609459 辉常哥 1 gcc是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器
  • FIFO和DMA

    FIFO SPI端口增加了FIFO xff0c 使得传输数据有了缓冲区间 FIFO存储器是一个先入先出的双口缓冲器 xff0c 即第一个进入其内的数据第一个被移出 xff0c 其中一个存储器的输入口 xff0c 另一个口是存储器的输出口 主
  • 蓝桥杯C语言基础练习 十进制转十六进制

    代码 xff08 解法类似十进制转二 八进制 xff09 include lt stdio h gt char getnum int z switch z case 0 return 39 0 39 break case 1 return
  • Linux和Windows下使用printf的差别

    1 Linux系统下 一般而言 xff0c 大家都知道printf是带有行缓冲的函数 xff0c printf把打印的消息先输出到行缓冲区 xff0c 在以下几种情况下 xff1a 1 程序结束时调用exit 0 return xff1b
  • Could not connect ot Redis No route to host问题解决

    局域网内访问另外一台服务器上的redis 报错 Could not connect to Redis No route to host 问题解决 发现是防火墙问题 于是设置 iptables N REDIS iptables A REDIS
  • 大数据挑战赛-鼠标轨迹识别

    大数据挑战赛 鼠标轨迹识别 xff0c 竞赛官网 xff1a http bdc saikr com c cql 34541 1 我们看一下整个竞赛的详情 赛题描述 鼠标轨迹识别当前广泛运用于多种人机验证产品中 xff0c 不仅便于用户的理解
  • 暴力破解字典列表

    GitHub上的 xff1a https github com danielmiessler SecLists tree master Passwords Leaked Databases https github com duyetdev
  • Burpsuite技巧之MD5加密密码爆破、带验证码爆破

    一 Burpsuite技巧之MD5加密密码爆破 现在有很多后台都不再是明文传输 xff0c 改成了各种各样的加密方式 今天就拿MD5加密方式做一个演示 xff0c 举一反三 xff0c 希望对新手有用 如图 xff0c MD5加密了密码 x
  • 解决ubuntu连不上网络,输入ifconfig只显示本地环回问题

    使用虚拟机打开ubuntu后发现无法连接网络 首先我使用了ping www baidu com 然后通过命令sudo service network manager restart重启服务后仍然没有用 于是输入命令ifconfig查看网卡
  • https://mp.weixin.qq.com/s/ilO6DZwRpWdrruKm4J8CMw

    近日安全漏洞频发 xff0c 小编在此收集了近期大家会比较关注的漏洞 xff0c 做个总结 xff0c 供大家查漏补缺 xff0c 若有缺失 xff0c 欢迎留言补充 目录 一 OA系统 二 E mail 三 Web中间件 四 源代码管理
  • 浅谈JavaScript、ES5、ES6

    什么是JavaScript JavaScript一种动态类型 弱类型 基于原型的客户端脚本语言 xff0c 用来给HTML网页增加动态功能 xff08 好吧 xff0c 概念什么最讨厌了 xff09 动态 xff1a 在运行时确定数据类型
  • js声明变量的三种方式

    JS 声明变量的三种方式 xff08 1 xff09 使用变量步骤 xff1a a 声明 gt b 赋值 gt 3 调用 正确用法 xff1a lt script type 61 34 text javascript 34 gt 方式一 x
  • JS中[感叹号]function(){}()的理解

    这种写法 xff0c 是一种 96 立即执行函数 96 的写法 xff0c 即IIFE等设计模式 这种函数在函数定义的地方就直接执行了 理解IIFE设计模式的关键是要认识到 xff0c 在ES6之前 xff0c JavaScript仅具有函