2019-02-03

回答

有时候是不需要的,有时候是需要的。这主要取决于 JavaScript 的自动插入分号的机制,解释器会在大多数语句后自动添加分号。也就是说在大多数情况下,我们是不需要分号的。
但是,在某些情况下我们是需要分号的。通常块元素开头是不需要分号的,但是下面代码片断就需要分号:

  1. [ 开头的行
    const previousLine = 3
    ;[1, 2, previousLine].map(n => n * 2) 
  2. ( 开头的行
    const previousLine = 3
    ;(function() {
    // ...
    })() 
    在上面的例子中,解释器不会在 3 之后插入分号,因此会把 3 看为一个对象去尝试访问他的属性或者调用他的方法,这样就会产生对应的错误 Cannot read property 'map' of undefinedUncaught TypeError: 3 is not a function

加分回答

  • 在 JavaScript 中,分号通常是可选的,但是在特定的情况下,他们是必不可少的。
  • 如果你不使用分号,像 Prettier 这样格式化的工具将会在编辑器保存的时候对需要分号的地方自动插入分号以防止出错。

返回总目录

每天 30 秒

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    2771 引用 • 4347 回帖 • 640 关注
  • 30Seconds

    前端面试 30s 系列问答翻译,英文原文请看 30-seconds-of-interviews

    68 引用 • 155 回帖 • 1 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    296 引用 • 930 回帖 • 1021 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    163 引用 • 1107 回帖 • 492 关注
感谢    关注    收藏    赞同    反对    举报    分享