立即调用函数表达式:括号放在哪里?

2024-03-15

我看过IIFE的写法:

(function() {
    console.log("do cool stuff");
})();

也:

(function() {
    console.log("do more cool stuff");
}());

它们在我使用过的任何环境中似乎都一样工作,尽管有时我被告知一种方法是正确的,另一种方法是错误的,反之亦然。有没有人有任何坚实的理由或逻辑可以将其写成一个订单而不是另一个订单?在某些情况下,在函数体关闭之后但在调用括号发挥作用之前,或者在最后一个右括号之后但之前,可能会发生更多事情?我主要在 Angular 模块闭包中使用这些,似乎找不到任何真正的理由去一种或另一种方式,想知道是否有人有不同的经验。


简短的回答:没关系,只要你把它们放在那里即可。

长答案:除了箭头函数之外,这并不重要,因为对于 JavaScript 来说,唯一重要的是它们的存在。原因是语言规范定义语句只能以function关键字如果你声明一个named功能。因此,这样定义 IIFE 是违反规范的:

function () {}();

解决方法是将整个内容括在括号中,这样语句就不会以function关键字不再。您可以通过使用来实现这一点

(function () {})();

以及使用:

(function () {}());

您选择哪一个完全是任意的,因此取决于您。

我(个人)将括号放在函数周围,而不是调用周围,即像这样:

(function () {})();

原因:我想使用最小的代码部分来包装仅出于技术原因所需的内容,这是函数定义,而不是调用。除此之外,规范说你不能define一个函数以这种方式,它不是关于调用该函数。因此,我认为如果您包装定义而不是调用,会更清楚。

edit但是,对于 es6 中的箭头函数,调用必须在包装器外部。它位于包装器内部会导致调用的左括号出现意外的标记错误。尚不完全清楚为什么会这样。

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

立即调用函数表达式:括号放在哪里? 的相关文章

  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Firefox 书签探索未超过 Javascript 的第一级

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

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win

随机推荐

  • PIL 图像从 RGB 转换为 YCbCr 结果为 4 个通道而不是 3 个通道,并且行为类似于 RGB

    嗯 标题很不言自明 我有一个图像文件 我想将其分别分成 Y Cb 和 Cr 打开文件后 将其从 RGB 这是打开图像文件时的默认模式 转换为 YCbCr 然后使用 numpy array 将其转换为数组 结果是一个具有 4 个通道的 2D
  • 重定向到 root_url 并返回,除非 @user.activated

    这是我的users controller方法 如果用户未激活 则应重定向 def show user User find params id redirect to root url and return unless user activ
  • android 使用 MapView 滑动水平视图分页

    我有一个 Android 应用程序 其视图包含 3 个页面 用户可以通过滑动手指 向左或向右 水平视图分页 在这些页面之间进行导航 我下载了 android support v4 view ViewPager 并找到了实现滑动部分的方法 这
  • 从两个不同的 C DLL 调用两个同名函数

    我需要在同一个可执行文件中访问两个 C DLL 我有两个库的头文件和 LIB 文件 不幸的是 我需要访问的函数子集具有完全相同的名称 到目前为止 我能想到的最佳解决方案是使用 LoadLibrary 加载其中一个 DLL 并使用 GetPr
  • 如何在 WordPress 中动态创建 pdf? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我使用 Contact Form 7 让用户输入数据 然后根据他们的数据输入 我需要在输出整个 pdf 之前向 pdf 添加不同的文本
  • 无延迟调用setTimeout

    在 JavaScript 库中经常看到这样的代码 setTimeout function 0 我想知道为什么要使用这样的包装代码 非常简化 浏览器是单线程的 并且这个单线程 UI 线程 在渲染引擎和 js 引擎之间共享 如果您想做的事情需要
  • 如何更改 Laravel 中请求参数的值

    我需要像这样更改请求参数的值 request gt name My Value 我使用这段代码但不起作用 request gt offsetSet img img Try to requestData request gt all requ
  • 如何在 gRPC python 中定义全局错误处理程序

    我试图捕获任何服务程序中引发的任何异常 这样我就可以确保只传播已知的异常 而不传播意外的异常 例如 ValueError TypeError 等 我希望能够捕获任何引发的错误 并格式化它们或将它们转换为其他错误 以更好地控制公开的信息 我不
  • 使用 Spring RestTemplate 将查询参数添加到每个 REST 请求

    有没有办法向执行的每个 HTTP 请求添加查询参数RestTemplate在春天 Atlassian API 使用查询参数os authType指定身份验证方法 所以我想附加 os authtype basic对每个请求 而不在我的代码中指
  • .NET Core 3.1 CreateHostBuilder无法解析JSON文件

    我在尝试运行 ASP Net Core 3 1 项目时遇到错误 错误位于CreateHostBuilder within Program cs public class Program public static void Main str
  • 有没有办法在成员名称循环中对 N C++ 类成员应用操作(可能通过预处理器)?

    问题 我有一个 C 类 其中有大量 gt 100 成员 其行为几乎相同 同类型 在函数中 每个成员都有与其他成员完全相同的代码 例如从构造函数中的映射进行赋值 其中映射键与成员键相同 这种行为的相同性在许多函数 gt 20 中重复出现 当然
  • Android - 手风琴小部件

    我正在寻找创建一个的最佳方法手风琴式小部件 如本页所示 http labs adobe com technologies spry samples accordion AccordionSample html 有没有办法使用标准 Andro
  • Omniauth“与”STI 和设计

    我想通了 没有结果 我有一个名为 User 的模型以及带有 STI 粉丝和艺术家的模型 如下所示 class User lt ActiveRecord Base devise database authenticatable registe
  • AngularJS - 为什么需要 $apply 来正确解决 $q 承诺?

    我正在尝试在我的角度应用程序中编写一个小型服务 这将使我能够选择全局 Javascript 对象中指定的配置参数 我不想尝试访问全局配置对象 除非文档已准备好 因为我无法保证脚本元素在 HTML 中插入的顺序 但是 我不明白为什么我需要打电
  • css 内联块与浮动

    我正在做一些测试float and inline block我注意到它们之间存在差异 正如你可以看到的这个例子 http codepen io anon pen kwrtD 如果我使用display inline blockdiv 之间有一
  • 如何检测OutofMemoryError的原因?

    我抱怨我的服务器应用程序在高负载时崩溃 这是一个运行在以下位置的网络应用程序Tomcat 5 我看到线程转储 并且发现存在 OutOfMemory 错误 1TISIGINFO 转储事件 systhrow 00040000 详细信息 java
  • java.lang.ClassCastException:DTOObject 无法转换为 DTOObject

    我在 Spring Boot 1 4 0M3 上运行的应用程序中遇到一个奇怪的问题 该应用程序使用 Spring 缓存实现 其中提供程序是 Redis 我收到 classCastException 无法转换相同的对象 我使用 Mongodb
  • C 中用户定义的数组大小

    我正在阅读 C 插图 第一个练习题问 MATMUL 程序将固定大小的矩阵相乘 使程序处理任何指定的尺寸 下面是我迄今为止提出的代码 但是我读到所有属性都需要在主函数之前声明 那么如何获得自定义大小的数组而不在主函数中声明它们呢 define
  • NSPopover - 焦点丢失时隐藏? (在弹出窗口外单击)

    我正在使用doubleClickAction of a NSTableView显示一个NSPopover 像这样的东西 NSInteger selectedRow dataTableView clickedRow NSInteger sel
  • 立即调用函数表达式:括号放在哪里?

    我看过IIFE的写法 function console log do cool stuff 也 function console log do more cool stuff 它们在我使用过的任何环境中似乎都一样工作 尽管有时我被告知一种方