尾随分号经常导致宗教战争。
您可以在 Qiita 和其他 SNS 上找到许多此类战斗。

然而,令人惊讶的是,很少有人将这场战争的原因追溯到根本原因。
用你发现的这个人(以及引用这篇文章的文章)是关于。

以下是 JavaScript 中尾随分号的 JavaScript 创建者布伦丹·艾希意见由地狱分号这是一个介绍。
请注意,这篇文章来自 2012 年,因此它可能包含缺失的链接或过时的发现。

地狱分号

这棵树每次看到你的评论,我都很难过。

有问题的代码,

  clearMenus()
  !isActive && $parent.toggleClass('open')

这段代码是自动分号插入 (ASI)因此,要进行minification,必须进行包括ASI在内的完整解析,检查clearMenus()后面的换行符的含义,删除换行符,同时插入分号。。

这是JS敏似乎有人认为这是一个错误道格·克罗克福德牙齿拒绝更改代码.

仅供参考,我同意道格的观点。

和我,@cramforce什么时候@jedschmidt我也同意楼主的意见
仅允许使用 &&,因为该语言源自 Java。虐待if 语句绝对是更好的风格。
换句话说,JSMin 是正确的立场。

但这种态度太特设了,无法解决“同时运行 ASI 和缩小”的问题。

道格也在下面的声明中说.

TC39 正在考虑使用! 作为中缀运算符。
这段代码迟早会坏掉。
了解如何正确使用分号。

! 作为中缀运算符是承诺语法糖,目前还没有正式的语法,可能是另一种语法。

然而,正如 Doug 所说,! 既不是句子的结尾也不是句子的开头。
我想补充一点,这同样适用于换行符。

承诺提案如果您查看[nlth],它会说明 ASI 和中缀运算符的一些惊人之处。
也就是说,将来我们可能会添加新的中缀运算符,甚至是 isisnt 这样的关键字运算符。
他们的中缀运算符称为[no LineTerminator here]

ECMA-262, [no LineTerminator here] 表示此处不允许终止,例如,return 右侧没有返回值的换行符。

中缀运算符未来功能的更改直接影响对换行符敏感的 ASI。

let flag = x is y;  // 
x ! p = v;          // 

Bootstrap 本身是一个很棒的库,但是 Bootstrap 的2行代码我同意道格的说法,即非常糟糕
这个例子的第 1 行的终止符当然很重要。

这个故事的寓意是,ASI 只是一个纠正语法错误的程序。
如果您将 ASI 编码为一种通用语法约定,那么您就有麻烦了。
这是 ECMA-262 的经典示例。

a = b + c
(d + e).print()

[/、一元+-等也会出现类似的问题。
请注意,如果没有错误,则不应用 ASI。

这个问题可能看起来微不足道,但当您开始组合 JavaScript 文件时,它会变得更加严重。
这就是为什么 Dojo 和 IRC 等一些风格指南建议使用 ; 开始文件的原因,但它经常被遗忘。

在 1995 年 5 月的十天里,我希望我能更多地考虑换行符。

我敢肯定他们需要\ 或括号而不是ASI 来继续行。

然而,这艘船已经在 17 年前航行了。

为了在 JavaScript 中系统地处理换行符,和谐根据括号使用的演变是必须的。
将为此工作但是 ES6 不太可能再出现这种情况了。

GitHub 问题充满了幼稚、理想主义和愚蠢的评论。
编程语言什么时候不再有参数语法了?
我所知道的每一种实用语言在格式上都有一定程度的自由度,这使得它可以用得不好,用得也好。
语言设计师写作自由度降低尽管我们尽了最大的努力,但我们无法完全消除它。

我有两个论点。
避免以影响 JavaScript 中换行符的方式使用 ASI。
并且不要滥用&&|| 应该使用if 句子。

此外,鉴于 JavaScript 的无名且荒谬的悠久历史,我会说我会修复 JSMin。
但在此之前,我想我会抛出一些尖刻的评论。

想法

所以 JavaScript 的创造者是一个分号狂热者。

然而,这篇文章写于 2012 年,之后isnt 运算符消失了,标准风格有很多库不使用分号,比如Vue,所以不知道现在的想法是什么。
此外,文章的所有外部链接都已失效,所以我不知道除此之外还写了什么,而且我遇到了麻烦,因为我不知道我同意什么。

但是,总体论点是 ASI 只是减轻语法错误的一种手段,不应依赖。

顺便说一句,我个人总是使用分号,但比起分号,我更像是一个语法禁令。
任何一种写法都是可能的,所以如果只能使用其中一种语法,无论是否附加,冲突都会得到解决。

好吧,这样的声明会破坏兼容性,所以它永远不会通过。

奖金

开始是一个引导问题。

"englishextra "如果我用 JSMin 缩小引导代码,它会中断。请将; 放入源代码中。"
fat “不,这是一个 JSMin 错误。告诉 Doug。”
Doug:“我不会因为这个疯狂和愚蠢的代码对 JSMin 做任何事情。”

之后,胖子和道格都没有出现,第三方之间的战斗持续了200多条评论。

脂肪是引导主要贡献者之一道格是JS敏是作者

JSMin 是一个通过删除注释和不必要的空格来减少 JavaScript 代码大小的库。
出现上述问题是因为它没有被解析而是被正式转换。
Doug 拒绝修复它,因为如果 bootstrap 正确放置 ;,这是一个不会发生的错误。
即便如此,它还是说That is insanely stupid code.

它在当时一定是一个有用的库,但自从出现了 Babel 和 gulp 等能够正确解析和缩小的缩小器,现在可以说它已经完成了它的作用。
另一件事提交消息我要你做点什么。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623458.html

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-16
  • 2021-10-20
  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
  • 2021-08-05
猜你喜欢
  • 2021-11-09
  • 2022-12-23
  • 2021-10-04
  • 2022-12-23
  • 2021-12-22
  • 2021-12-13
  • 2021-07-19
相关资源
相似解决方案