推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
iamdhj

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

  •  
  •   iamdhj · Oct 18, 2017 · 4860 views
    This topic created in 3305 days ago, the information mentioned may be changed or developed.

    在网上看 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 不写分号的例子,原本也想转成不写分号省得多按一下键盘,看来暂时还是继续写分号稳妥一点

    16 replies  •  2017-10-19 09:47:37 +08:00
    yangg
    yangg
    Oct 18, 2017
    1
    使用 standard,要分号的时候会提示。
    oyhw92
    oyhw92
    Oct 18, 2017
    2
    如果一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一起解释。
    leemove
    leemove
    Oct 18, 2017
    3
    行首如果是"(, [, `"上一行必须写分号.
    这是不写分号最低限度的前提.
    coolzjy
    coolzjy
    Oct 18, 2017
    4
    难道这种情况不都会写成

    ;[1, 2, 3]

    ;(function () {})()
    seki
    seki
    Oct 18, 2017
    5
    这种属于特例,特例也并不多,记住了就好了

    个人觉得如果为了这个就每一句加分号不值得
    FrankFang128
    FrankFang128
    Oct 18, 2017
    6
    分号:这锅我不背
    Rice
    Rice
    Oct 18, 2017
    7

    用 lint 工具,会在要加分号的时候提示
    ZhLTE
    ZhLTE
    Oct 18, 2017
    8
    看了楼上的 。。觉得还不如加呢- -还美观点
    PythonAnswer
    PythonAnswer
    Oct 18, 2017 via Android
    9
    括号前都加上

    运算符也是
    kfll
    kfll
    Oct 18, 2017
    10
    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
    Tompes
    Oct 18, 2017
    11
    还是觉得加分号比较舒服 [233]
    mrtanweijie
    mrtanweijie
    Oct 18, 2017
    12
    用了 standard 之后习惯不用分号了
    fds
    fds
    Oct 18, 2017
    13
    用 prettier 自动给需要的地方加分号
    zthxxx
    zthxxx
    Oct 18, 2017
    14
    不用加分号是因为 JavaScript 有自动分号插入机制帮你加了,但是在一些语法情况下不会自动插入分号,比如一行花括号、方括号和一些运算符号开头,也就是楼上 #2 说的情况,楼主这里只是 [1, 2, 3] 以方括号开头,才导致上下行解析出错,一般情况不也不需要加分号。
    Cbdy
    Cbdy
    Oct 18, 2017 via Android
    15
    一刀切得都加只是掩盖问题,搞清 js 的 asi 机制才是关键
    denano
    denano
    Oct 19, 2017
    16
    [1, 2, 3]前要加分号,属于特例。。
    为了好看的话,应该 let arr = [1, 2, 3],然后 arr.forEach
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3440 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 00:47 · PVG 08:47 · LAX 16:47 · JFK 19:47
    ♥ Do have faith in what you're doing.