javascript 中函数闭包前是否需要分号?

2023-12-01

我想知道这是否是一个编译器错误,或者这就是它应该的方式。

使用node.js v10.15.3,此代码会抛出错误:

var x
x = false
(function y() { console.log('foo') }())

但这段代码工作正常:

var x
x = false;
(function y() { console.log('foo') }())

区别在于分号。错误消息是:“TypeError: false is not a function”,因此看来如果没有分号,编译器会将“false”关键字后面的开放括号解析为函数调用,就好像我写了“x = false ()”。我花了很长时间才弄清楚我的代码出了什么问题(显然,这比上面的例子更复杂。)这是我生命中的一部分,我不会再回来了!

我的问题是:为什么?我认为行尾不需要分号?我刚刚读过关于分号插入的 ECMA 规范试图弄清楚这一点,但对我来说仍然有点模糊。

我想这个故事的寓意就是继续并用分号终止所有行。有趣的是,作为一名 C 程序员,这是我的习惯,我只是想通过放弃所有那些不需要的分号来跟上时代。


JavaScript 解析器看到这个

var x
x = false
(function y() { console.log('foo') }())

as this:

var x;
x = false(function y() { console.log('foo') }());

这意味着您正在尝试致电false作为一个函数。这是因为 JS 解析器总是尝试获取最长的表达式。

大多数情况下,编写带或不带分号的 JS 只是样式问题。但是,在以下情况下您需要添加分号:

  • 有2行代码,并且
  • 第一行以可能的标识符(或关键字,例如if or while), and
  • 第二行以括号开头。

在这种情况下,分号应添加到第一行的末尾或第二行的开头。

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

javascript 中函数闭包前是否需要分号? 的相关文章

随机推荐

  • R 中显示的摘要很短,许多术语显示为“其他”

    如何显示完整的输出摘要 而不将任何值分类为 其他 summary d Date of Sale City Department Product 1 18 2015 149 A 5290 Footwear Mens 538 13245 255
  • 如何使用 Vertx JDBC Client 使用列表作为 SQL 查询的参数源?

    我有一个 Vert x Web 应用程序 需要查询运行 Postgres 10 7 的 AWS RDS 实例 Vert x JDBC 客户端是io vertx vertx jdbc client 3 8 4 我想查询一个表 其约束条件是某个
  • 清算意图

    我的 Android 应用程序被传递信息的意图 状态栏中的待定意图 调用 当我按下主页按钮并按住主页按钮重新打开我的应用程序时 它会再次调用意图 并 且相同的附加功能仍然存在 Override public void onSaveInsta
  • android Volley如何发布多个参数

    如何发布多个参数android Volley 发布多个数组 如 101 102 103 params put sessionid 101 102 103 就像 任何其他方式 public void postCompanyArticle St
  • 没有选择 emacs ido 所建议的内容? [复制]

    这个问题在这里已经有答案了 在我当前的工作目录中 WD有一个abc txt文件 现在我想做另一个abc txt子目录下 WD NEW 当我打字时C x C f和目录 WD NEW abc txt ido 正在将字符串更改为 WD abc t
  • 如何为 scikit-learn 提供随机数生成器的种子?

    我正在尝试为一些使用 scikit learn 的代码编写单元测试 然而 我的单元测试似乎是不确定的 AFAIK 我的代码中 scikit learn 使用随机性的唯一地方是它的LogisticRegression模型及其train tes
  • 如何将两个不同的域名指向同一个网站? [关闭]

    Closed 这个问题是无关 目前不接受答案 我有一个网站 但这个网站没有完整的域名 但在互联网上排名很好 我想让这个网站由两个不同的域名指向 请建议我该怎么做 请给我简单的步骤来做到这一点 Thanks 在每个域下 您应该有 DNS 设置
  • 如何从命令行构建 MSIX [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我们已经了解 MSIX 是 ClickOnce 的一个有趣的现代替代品 与 GUI 一起使用运行流畅 我们还希望将其与 Powershell CMD 脚本一起使用 我们只想要 m
  • (字符串)文字的范围

    我总是尽量避免返回字符串文字 因为我担心它们没有在函数外部定义 但我不确定情况是否如此 我们以这个函数为例 const char return a string void return blah 这是正确的代码吗 它确实对我有用 但也许它只
  • 就像 MySQL 中区分大小写一样

    我有一个 MySQL 查询 SELECT concat ws title description as concatenated HAVING concatenated LIKE SearchTerm 我的表是用 MyISAM 编码的 ut
  • 使用原始音乐数组进行循环 android

    我目前正在尝试创建一个 for 循环 在该循环中它将播放原始文件 完成后 它将继续播放数组中的下一个声音文件 目前它正在一次播放所有文件 关于如何解决这个问题有什么建议吗 我认为完成监听器可能有问题 但不确定 谢谢 my Code pack
  • 使用单个 URL 抓取多个页面上的表

    我正在尝试从 Fangraph 中抓取数据 这些表分为 21 个页面 但所有页面都使用相同的 URL 我对网络抓取 或一般的Python 非常陌生 但Fangraphs没有公共API 所以抓取页面似乎是我唯一的选择 我目前正在使用 Beau
  • Javafx 四边形网格

    我需要在javafx中显示一个四边形网格 每个网格面有4个点我尝试了一些来自fxyz的三角形网格示例library 但不确定它如何适用于四边形 有人可以帮助指出 javafx 中四边形网格的示例吗 OpenJFX 上提供的 3DViewer
  • 如果我在不同的国家/地区,如何知道特定国家/地区的时间?

    我正在尝试这样做 1 获取我的当前时间和时区 2 我从 Google 知道该特定国家 地区的时区 3 计算时区差异 4 从当前时间中减去该差值 这会给我在其他国家的时间 我被困在步骤 3 和 4 了 我得到这样的当前时间 Date d ne
  • Java字符串操作:根据模式从字符串中提取整数和浮点数

    我有以下两个可能的字符串内容 显然 金额总是有所不同 我想提取关键信息并 Case 0 pricesString Case 1 pricesString 0 023 Case 2 pricesString 10 1 46 100 0 16
  • Oracle:发送 JMS 消息的 Java 存储过程

    我正在尝试将点对点 JMS 消息从 Oracle 数据库存储过程发送到 java 应用程序 这两个 点 位于不同的机器上 我已确认它们可以通过 ping 相互通信 我创建了一个 java 应用程序 能够成功地从应用程序服务器内的队列中取出消
  • Android Studio 中未显示 Windows 的构建选项

    我使用的是 Flutter Desktop 的最新稳定版本 并且已经安装了 Visual Studio 2022 但仍然没有显示 Windows 选项 我还需要在稳定版本中运行以下命令吗 flutter config enable
  • 删除 NaN 行在 pandas 中不起作用[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个大约 7k 行和 4 列的文件 很多单元格都是空的 我尝试使用许多 pandas 函数删除它们 但似乎没有任何效果 我尝试过的功能和代码如下 我尝试过的 df df
  • 为什么 GetProcAddress 不起作用?

    首先 我创建一个简单的 dll 名为SimpleDll dll 其头文件 SimpleDll h ifdef MYLIBAPI else define MYLIBAPI declspec dllimport endif MYLIBAPI i
  • javascript 中函数闭包前是否需要分号?

    我想知道这是否是一个编译器错误 或者这就是它应该的方式 使用node js v10 15 3 此代码会抛出错误 var x x false function y console log foo 但这段代码工作正常 var x x false