在网上看 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 不写分号的例子,原本也想转成不写分号省得多按一下键盘,看来暂时还是继续写分号稳妥一点
1
yangg 2017-10-18 14:43:51 +08:00
使用 standard,要分号的时候会提示。
|
2
oyhw92 2017-10-18 14:52:19 +08:00
如果一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一起解释。
|
3
leemove 2017-10-18 14:53:31 +08:00
行首如果是"(, [, `"上一行必须写分号.
这是不写分号最低限度的前提. |
4
coolzjy 2017-10-18 14:55:26 +08:00
难道这种情况不都会写成
;[1, 2, 3] ;(function () {})() |
5
seki 2017-10-18 14:59:25 +08:00
这种属于特例,特例也并不多,记住了就好了
个人觉得如果为了这个就每一句加分号不值得 |
6
FrankFang128 2017-10-18 15:08:42 +08:00
分号:这锅我不背
|
7
Rice 2017-10-18 15:14:04 +08:00
用 lint 工具,会在要加分号的时候提示 |
8
ZhLTE 2017-10-18 18:00:50 +08:00
看了楼上的 。。觉得还不如加呢- -还美观点
|
9
PythonAnswer 2017-10-18 18:13:28 +08:00 via Android
括号前都加上
运算符也是 |
10
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 |
11
Tompes 2017-10-18 18:23:31 +08:00
还是觉得加分号比较舒服 [233]
|
12
mrtanweijie 2017-10-18 18:28:21 +08:00
用了 standard 之后习惯不用分号了
|
13
fds 2017-10-18 18:30:28 +08:00
用 prettier 自动给需要的地方加分号
|
14
zthxxx 2017-10-18 18:39:35 +08:00
不用加分号是因为 JavaScript 有自动分号插入机制帮你加了,但是在一些语法情况下不会自动插入分号,比如一行花括号、方括号和一些运算符号开头,也就是楼上 #2 说的情况,楼主这里只是 [1, 2, 3] 以方括号开头,才导致上下行解析出错,一般情况不也不需要加分号。
|
15
Cbdy 2017-10-18 19:24:05 +08:00 via Android
一刀切得都加只是掩盖问题,搞清 js 的 asi 机制才是关键
|
16
denano 2017-10-19 09:47:37 +08:00
[1, 2, 3]前要加分号,属于特例。。
为了好看的话,应该 let arr = [1, 2, 3],然后 arr.forEach |