js 不加分号导致的运行异常

2017-10-18 14:41:00 +08:00
 iamdhj

在网上看 forEach 异步按顺序执行的问题,发现有一个例子直接没有输出,不按顺序执行应该也有输出才对

const waitFor = (ms) => new Promise(r => setTimeout(r, ms))

[1, 2, 3].forEach(async (num) => {
  await waitFor(50)
  console.log(num)
})

console.log('Done')

     

开始以为是 async/await 导致的问题,调试、精简一番,发现原来 forEach 语句和上面返回语句拼到一起解析了,Firefox、Chrome 都是同样结果,应该不是解析器问题

const func = p => p

[1, 2, 3].forEach((num) => {
    console.log(`forEach:${num}`)
})

console.log('Done')

     

最近看到不少 js 不写分号的例子,原本也想转成不写分号省得多按一下键盘,看来暂时还是继续写分号稳妥一点

3450 次点击
所在节点    JavaScript
16 条回复
yangg
2017-10-18 14:43:51 +08:00
使用 standard,要分号的时候会提示。
oyhw92
2017-10-18 14:52:19 +08:00
如果一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一起解释。
leemove
2017-10-18 14:53:31 +08:00
行首如果是"(, [, `"上一行必须写分号.
这是不写分号最低限度的前提.
coolzjy
2017-10-18 14:55:26 +08:00
难道这种情况不都会写成

;[1, 2, 3]

;(function () {})()
seki
2017-10-18 14:59:25 +08:00
这种属于特例,特例也并不多,记住了就好了

个人觉得如果为了这个就每一句加分号不值得
FrankFang128
2017-10-18 15:08:42 +08:00
分号:这锅我不背
Rice
2017-10-18 15:14:04 +08:00

用 lint 工具,会在要加分号的时候提示
ZhLTE
2017-10-18 18:00:50 +08:00
看了楼上的 。。觉得还不如加呢- -还美观点
PythonAnswer
2017-10-18 18:13:28 +08:00
括号前都加上

运算符也是
kfll
2017-10-18 18:23:03 +08:00
https://github.com/standard/standard

...
The Rules
...
No semicolons – It's fine. Really!
Never start a line with (, [, or `
This is the only gotcha with omitting semicolons – automatically checked for you!
More details
Tompes
2017-10-18 18:23:31 +08:00
还是觉得加分号比较舒服 [233]
mrtanweijie
2017-10-18 18:28:21 +08:00
用了 standard 之后习惯不用分号了
fds
2017-10-18 18:30:28 +08:00
用 prettier 自动给需要的地方加分号
zthxxx
2017-10-18 18:39:35 +08:00
不用加分号是因为 JavaScript 有自动分号插入机制帮你加了,但是在一些语法情况下不会自动插入分号,比如一行花括号、方括号和一些运算符号开头,也就是楼上 #2 说的情况,楼主这里只是 [1, 2, 3] 以方括号开头,才导致上下行解析出错,一般情况不也不需要加分号。
Cbdy
2017-10-18 19:24:05 +08:00
一刀切得都加只是掩盖问题,搞清 js 的 asi 机制才是关键
denano
2017-10-19 09:47:37 +08:00
[1, 2, 3]前要加分号,属于特例。。
为了好看的话,应该 let arr = [1, 2, 3],然后 arr.forEach

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

https://www.v2ex.com/t/398645

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

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

© 2021 V2EX