You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行ESLint后代码报SyntaxError: Unexpected token )求助

解决ESLint添加尾随逗号导致的语法错误问题

嘿,我来帮你搞清楚这个问题!你遇到的报错根本原因不是换行,而是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:37:57