因此,大约2周前,我在自己的机器人中添加了一个经济系统,并且现在已经尝试修复它的错误已有4天了,我遇到了很多错误,实际上我是一个粘在椅子上的斑点,不断出现精神崩溃,把这个想出来(解决;计算出;弄明白。
我当前遇到的错误是:ReferenceError:未定义utea?
我在脚本中的消息事件开始时定义了utea:
client.on("message", msg => { // When user sends chat message
let userData = JSON.parse(fs.readFileSync(__dirname + '/Storage/userData.json', 'utf8'))
// LET VARS
let content = msg.content.toLowerCase()
if (msg.guild !== null) {
// CASE COIN CURRENCY
if (!userData[msg.author.id + msg.guild.id]) userData[msg.author.id + msg.guild.id] = {}
if (!userData[msg.author.id + msg.guild.id].money) userData[msg.author.id + msg.guild.id].money = 5
// ITEMS
if (!userData[msg.author.id + msg.guild.id].tea) userData[msg.author.id + msg.guild.id].tea = 0
if (!userData[msg.author.id + msg.guild.id].milk) userData[msg.author.id + msg.guild.id].milk = 0
if (!userData[msg.author.id + msg.guild.id].cof) userData[msg.author.id + msg.guild.id].cof = 0
// ITEMS >B> USAGE VARS
let utea = 0
let umilk = 0
let ucof = 0
}
fs.writeFile(__dirname + '/Storage/userData.json', JSON.stringify(userData), (err) => {
if (err) console.error(err)
})
导致它的行:
if (utea == 0) { // this line right here <<<
// code stuff
}
最佳答案
问题是范围。
MDN: let
语句声明一个块作用域局部变量,可以选择将其初始化为一个值。
换句话说,此变量utea
仅存在于if (msg.guild !== null) { }
块中
但是,如果您写:
var utea = 0
看到:
MDN:
var
语句声明一个变量,可以选择将其初始化为一个值。此变量将不会限制在块内,您的代码应该可以工作。
我会说,这不是一个好习惯。在Ecma上添加
let
和const
的原因之一是为了防止在大范围内误导变量的使用。要继续使用
let
,请将变量声明放在if
语句之外:let utea = 0
if (msg.guild !== null) {
// ...
}
// ...
if (utea == 0) {
// ...
}