运行ESLint后代码报SyntaxError: Unexpected token )求助
嘿,我来帮你搞清楚这个问题!你遇到的报错根本原因不是换行,而是ESLint给函数参数加的那个末尾逗号(就是c后面的,)。
为什么会报错?
JavaScript在ES2017(也就是ES8)之后才支持函数参数的尾随逗号,如果你运行代码的环境(比如旧版本的Node.js、老浏览器)不支持ES8+的语法,就会触发SyntaxError: Unexpected token )这个错误——引擎会把c, );里的逗号当成多余的语法,直接报错。
为什么ESLint会加这个逗号?
这是因为你的ESLint配置里开启了comma-dangle(尾随逗号)规则,而且配置项可能是always(总是添加)或者类似的选项,导致它自动给函数参数加上了末尾逗号。
怎么解决?
有两个思路,选适合你的就行:
调整ESLint规则:如果你的运行环境不支持ES8+,直接把
comma-dangle规则改成禁止添加尾随逗号,或者只在多行参数时添加。比如在你的.eslintrc(或者其他ESLint配置文件)里修改:{ "rules": { // 完全禁止尾随逗号 "comma-dangle": ["error", "never"] // 或者只在多行参数/对象时添加,单行不添加 // "comma-dangle": ["error", "only-multiline"] } }修改后重新运行ESLint,它就不会给单行的
foo(a, b, c);加末尾逗号了。升级运行环境:如果你的项目可以升级到支持ES8+的环境(比如Node.js 8及以上,Chrome 58+、Firefox 54+等现代浏览器),那这个尾随逗号是合法语法,报错会自动消失,你也可以保留ESLint的规则。
再澄清一下你的疑惑
你以为是换行后的);引发的错误,其实是前面的逗号搞的鬼——哪怕代码写成foo(a, b, c,);(不换行),在旧环境里一样会报错,换行只是让错误提示的位置指向了),但根源是那个多余的末尾逗号。
内容的提问来源于stack exchange,提问作者hihipriz

