以下代码返回错误消息 " console.log(...)不是函数"
if (4<5) console.log('hi')
(4<5) ? console.log('hi') : console.log('bye')
以下代码不会返回任何错误
if (4<5) console.log('hi')
if (4<5) console.log('hi')
为什么会这样?
答案 0 :(得分:5)
在第一行末尾没有分号,代码尝试使用第一个console.log
的返回值作为函数,并使用参数4<5
调用它;如果删除换行符,则更清楚:
if (4<5) console.log('hi')(4<5) ? console.log('hi') : console.log('bye')
// ^^^^^^^^^^^^^^^^^^^^^^---- looks like calling `console.log` and then
// using the result as a function
任何时候你结合使用分号(这意味着你依赖于纠错机制 1 )的可能性用表达式语句。由于表达式语句本质上是表达式,如果解析器可以在前面的表达式或语句中使用它们,它将会。
FWIW,astexplorer.net是我最近发现的一个很酷的工具(感谢Babel项目)。它是一个交互式语法树资源管理器,它可以使用多个解析器中的任何一个来解析您的代码,并告诉您完全如何解析它。从github帐户开始,它由我们自己的Felix Kling启动。
ASI(正式来说)是一种语法错误纠正程序。如果您开始编码就好像它是一个普遍的重要换行规则,那么您将遇到麻烦。