Johnny Pachecp Asked: 2020-03-16 05:35:17 +0800 CST 2020-03-16 05:35:17 +0800 CST 2020-03-16 05:35:17 +0800 CST JS中的分号,在性能级别上推荐? 772 我知道使用 ; 在JS中,但是对于效率更高的JS解释器,我们应该放还是不放? javascript 2 Answers Voted Best Answer ffflabs 2020-03-16T06:18:20+08:002020-03-16T06:18:20+08:00 如果省略分号,javascript 解释器会尽力推断一个块在哪里结束,下一个块从哪里开始。 有边缘情况。解释器可能会假设换行符意味着它不属于的分号。例如,如果你写 function escribe5() { return 5 } console.log(escribe5()) 口译员将其视为 function escribe5() { return; 5; } 并因此返回undefined。 另一个不是口译员的错的案例 认为你声明了一个函数表达式 var mayuscula=function(texto) { return texto.toUpperCase(); }; (console.log(mayuscula('hola'))); 逻辑上返回HOLA。 如果省略分号: var mayuscula=function(texto) { return texto.toUpperCase() } (console.log(mayuscula('hola'))) 解释器假定您通过传递console.log(mayuscula('hola'))a参数来立即执行该函数mayuscula。这会给你一个错误。我再说一遍,这不是解释器错误。在某些情况下,您真的想立即运行该函数。 另一个例子。您声明一个字符串、一个数值变量,然后在该字符串上运行正则表达式: var texto,numero; texto="cadena de texto"; numero=0; /cadena/g.exec(texto); 这将打印(在浏览器控制台中) ["cadena", index: 0, input: "cadena de texto", groups: undefined] 如果您不使用分号执行此操作: var texto,numero texto="cadena de texto" numero=0 /cadena/g.exec(texto) 解释器将假定使用numero正0 / (cadena/g.exec(texto))则表达式的开头作为除法运算符,并返回: Uncaught ReferenceError: cadena is not defined JackNavaRow 2020-03-16T08:55:20+08:002020-03-16T08:55:20+08:00 简短的回答:是的。 长答案 要知道我们是否有良好的性能,我们必须验证EcmaScript文档中关于分号的内容 ECMAScript 语句和声明必须以分号结尾。这样的分号总是可以明确地出现在源文本中。然而,为方便起见,在某些情况下,这些分号可能会从源文本中省略。这些情况的描述是在这些情况下分号自动插入到源代码标记序列中。 同样,如果您出于某些原因不想使用分号,则必须遵守手动链接中的规则,如11.9.1 自动分号插入规则以及如果您想查看示例11.9。 2自动分号 插入示例 表示指令和/或语句的;结束,但如果我们想要制作.js重量更轻的文件(min.js),;您未添加的文件可能会给您带来问题 let a="SoEs";console.log(a); let a="SoEs" console.log(a) 正如我们所看到的,在某些情况下,分号是必需的,这使得 javascript 解释器很难假设事情,让解释器推断何时使用分号以及何时不使用分号这一事实,浪费了解释器的时间。 尽管如此, 一些框架告诉我们不使用它是“良好实践”,但 为什么呢? 避免阻止框架快速编译的“愚蠢错误”,避免分号的糟糕时间。 当我想发布 JavaScript 应用程序时,框架会做什么? 有一个程序负责转译代码,放置“;” 并将其带到 . min.js除了其他东西,最受欢迎和使用最多的是Babel
如果省略分号,javascript 解释器会尽力推断一个块在哪里结束,下一个块从哪里开始。
有边缘情况。解释器可能会假设换行符意味着它不属于的分号。例如,如果你写
口译员将其视为
并因此返回
undefined
。另一个不是口译员的错的案例
认为你声明了一个函数表达式
逻辑上返回
HOLA
。如果省略分号:
解释器假定您通过传递
console.log(mayuscula('hola'))
a参数来立即执行该函数mayuscula
。这会给你一个错误。我再说一遍,这不是解释器错误。在某些情况下,您真的想立即运行该函数。另一个例子。您声明一个字符串、一个数值变量,然后在该字符串上运行正则表达式:
这将打印(在浏览器控制台中)
如果您不使用分号执行此操作:
解释器将假定使用
numero
正0 / (cadena/g.exec(texto))
则表达式的开头作为除法运算符,并返回:简短的回答:是的。
长答案
要知道我们是否有良好的性能,我们必须验证EcmaScript文档中关于分号的内容
同样,如果您出于某些原因不想使用分号,则必须遵守手动链接中的规则,如11.9.1 自动分号插入规则以及如果您想查看示例11.9。 2自动分号 插入示例
表示指令和/或语句的
;
结束,但如果我们想要制作.js
重量更轻的文件(min.js
),;
您未添加的文件可能会给您带来问题正如我们所看到的,在某些情况下,分号是必需的,这使得 javascript 解释器很难假设事情,让解释器推断何时使用分号以及何时不使用分号这一事实,浪费了解释器的时间。
尽管如此,
一些框架告诉我们不使用它是“良好实践”,但 为什么呢?
避免阻止框架快速编译的“愚蠢错误”,避免分号的糟糕时间。
当我想发布 JavaScript 应用程序时,框架会做什么?
有一个程序负责转译代码,放置“;” 并将其带到 .
min.js
除了其他东西,最受欢迎和使用最多的是Babel