遇到一个 JS 语法错误, 加了分号就可以运行

2023-06-15 16:21:14 +08:00
 lxy42

demo 在 jsfiddle

对 JS 不太熟悉, Google 上搜了一些关键词(semicolon anonymous function syntax error)没找到答案. 为什么一定要在调用匿名函数的上一行语句添加加分号?

4210 次点击
所在节点    JavaScript
29 条回复
rekulas
2023-06-15 23:13:54 +08:00
@flyqie 我写 go 一直都不加分号,大部分人也是吧
其实加不加我都能接受
但是 js 这种各种项目加与不加夹杂一起的看着就非常难受
autoxbc
2023-06-16 02:41:41 +08:00
感觉不是那几种 token 少见,而是不加分号党会有意避开

我日常加分号,以 [ 或者 ( 开头的代码就很多:
1. 同步函数中的异步部分,如果不需要等待结果,就用一个立即执行的异步函数套起来,开头就是 ( async () => ;
2. 对已有变量解构赋值,就要用 ( { foo } = obj ) 的写法;
3. 对三目运算的结果调用方法,要用括号包起来 ( a ? b : c ).fn();
4. 数组字面量调用方法,[...obj].forEach ;
5. 对象字面量调用方法 ({ a: fn1 , b: fn2 })[v]() ;

随手一找就一堆,这些都不算真实世界的代码呗
lilei2023
2023-06-16 07:54:11 +08:00
远古时期都是这个干的,防止压缩后出问题
xuanbg
2023-06-16 07:59:28 +08:00
对于不加分号的逻辑我实在是理解不能。这个分号是能让你代码产生歧义还是能让代码运行不能?
laoyutang
2023-06-16 09:09:41 +08:00
不加分号有歧义,但是这不是 ide 自动就会给你加上的,哪里还能让他报出错来
huijiewei
2023-06-16 09:24:25 +08:00
JS 的风格之路是这样的:
远古时期都加分号的
然后开始不加分号的风格,但是在某些特殊语句前加分号,所以你会看到很多库第一个字符就是分号
然后现在又流行加分号了
jinliming2
2023-06-16 10:22:22 +08:00
@dcsuibian #20 > 我还从没见过实际代码中用正则、加号、减号作为行首的情况

如果是懒癌的话,应该这种情况很常见吧?举个正则的例子:
/xxx/.test(variable) && callFunc();
就是用正则判断一个字符串是否匹配,然后调一个函数,当然是可以改成 if 语句的,但是这样更简洁。
+ 和 - 到确实是不多,- 能想到的也是行首这个 负数与一个变量的判断,比如
-5 === variable || callFunc ();
但是交换一下等号两边,也是可以避免,也不会带来复杂性提升。
至于 + 号,见过有人用这个放在变量前来转数据类型的,但我是不这么用的
jackytsu
2023-06-16 11:08:14 +08:00
不加分号可以这样写:
const foo = `bar`
console.log('hello') // add ; to fix syntax error
!function () {
alert("It's worked!!!")
}();
solitary830
2023-06-16 15:32:43 +08:00
就我个人理解而言其实与前方那个将函数一起运行的相似,首先你这个是自执行函数,如果不加分号的话会认为是一体的,我也刚开始前端,知道的不深刻,总直是如果是自执行函数的话最好是前方加一个分号去区分

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/949018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX