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

JavaScript Discord机器人switch语句中const重复声明报错解决方案咨询

解决switch case中重复声明常量的问题

在使用switch/case开发Discord测试机器人时,两个命令的case分支中都用const声明了user常量,导致抛出错误Identifier 'user' has already been declared。这是因为JavaScript的switch结构中,所有case分支共享同一个块级作用域,const不允许在同一作用域内重复声明同名变量。

解决方法:给每个case分支添加独立作用域

给每个case的代码块包裹花括号{},让每个分支拥有自己的块级作用域,这样const声明的user只会在当前分支的作用域内生效,不会与其他分支冲突。

修改后的代码示例:

case "avatar": {
     const user = message.mentions.users.first() || client.users.cache.get(args[0]) || await client.users.fetch(args[0]) ||  message.author
     if (!user) return message.edit(`Aucun utilisateur de trouvé pour \`${args[0] || "rien"}\``)
     message.edit(`Voici l'avatar de **${user.tag}**:\n${user.displayAvatarURL({dynamic: true, size: 4096})}`)
     break;
}

case "userinfo": {
     if (!message.guild) return message.edit("Commande utilisable uniquement sur un serveur")
     const user = message.mentions.members.first() || client.members.cache.get(args[0]) || await client.members.fetch(args[0]) ||  message.member
     if (!user) return message.edit(`Aucun utilisateur de trouvé pour \`${args[0] || "rien"}\``)
     break;
}

替代方案:使用let声明变量

如果不想添加花括号,可以在switch外部用let声明user变量,然后在每个case分支中直接赋值(注意不要重复声明):

let user;

case "avatar":
     user = message.mentions.users.first() || client.users.cache.get(args[0]) || await client.users.fetch(args[0]) ||  message.author
     if (!user) return message.edit(`Aucun utilisateur de trouvé pour \`${args[0] || "rien"}\``)
     message.edit(`Voici l'avatar de **${user.tag}**:\n${user.displayAvatarURL({dynamic: true, size: 4096})}`)
     break;

case "userinfo":
     if (!message.guild) return message.edit("Commande utilisable uniquement sur un serveur")
     user = message.mentions.members.first() || client.members.cache.get(args[0]) || await client.members.fetch(args[0]) ||  message.member
     if (!user) return message.edit(`Aucun utilisateur de trouvé pour \`${args[0] || "rien"}\``)
     break;

这种方法虽然可行,但变量会存在于整个switch的作用域中,不如第一种方法的块级作用域清晰,推荐优先使用添加花括号的方案。

内容的提问来源于stack exchange,提问作者Sans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:00:19