ReferenceError: utea не определено? - PullRequest
0 голосов
/ 02 апреля 2020

Итак, я добавил экономичную систему к своему боту около 2 недель go и уже 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
}

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Проблема заключается в области действия.

MDN: Оператор let объявляет локальную переменную области блока, опционально инициализируя ее значением.

Другими словами, эта переменная utea существует ТОЛЬКО внутри if (msg.guild !== null) { } block

Но если вы напишите:

var utea = 0

См .:

MDN: Оператор var объявляет переменную, дополнительно инициализируя ее значением.

Эта переменная не будет ограничена в блок, и ваш код должен работать.

Я скажу, однако, это не очень хорошая практика. Одной из причин добавления let и const в Ecma было предотвращение вводящего в заблуждение использования переменных в больших областях.

Чтобы продолжить использование let, поместите объявление переменной вне оператора if:

let utea = 0

if (msg.guild !== null) {
  // ...
}

// ...

if (utea == 0) {
  // ...
}
1 голос
/ 02 апреля 2020

utea определено в вашем условном блоке

if (msg.guild! == null) {...}

вне блока utea не определен

...