ES6模板字符串和自动插入分号

问题描述:

考虑下面的代码:ES6模板字符串和自动插入分号

`abc`.split(`b`) 
`abc`.split(`b`) 

这种失败TypeError: "abc".split(...) is not a function

Try it here.

要使其工作,我们需要插入这两个之间用分号声明。 同样的代码工作正常,如果我们用一个普通字符串对下联:

`abc`.split(`b`) 
"abc".split(`b`) 

什么是这种现象的原因?

我想这与自动分号插入做一些令人毛骨悚然的东西有关,但我无法弄清楚这将是什么。
另外,常规模板字符串和模板字符串之间似乎有区别的事实让我感到困惑。这些不应该是相等的吗?

+1

分号的自动插入并不意味着你总是可以将它们排除在外,在某些情况下,它们确实需要避免出现问题,这似乎是其中分号不是有效语法的地方之一插入。 – adeneo

模板文字可以是tagged with a function,字符串文字不能。请注意,

tag`a ${x} b`; 

基本上等同于

tag("a ", x, " b"); 

因为你的表情`abc`.split(`b`) `abc`.split(`b`)在语法上是有效的,有no automatic semicolon insertion这里发生的一切。不要忽略必要的分号。这不是说ASI在做什么怪事,它只是在你期望的时候什么都不做。

如果你想省略分号,让他们自动插入其中没有需要可能,你会在每次与([/+-`开始行need to put one at the begin