Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Variable throws initialization error after initializing it

I’m trying to make a Discord bot, one of its features is that it plays chess, at the start of the command, I read the JSON file, then check if it’s undefined since I’ll call a key from the object, so just in case it doesn’t exist already, I’ll create the data needed

Problem is, when I try to assign the data, it says I haven’t initialized the variable, which is weird, because I did initialize it 3 lines before, var, let and const all throw the same error

Another thing is that outside the if statement, just above it, when console.logging it, it works perfectly, but when console.logging it inside the if statement, it throws that error

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I honestly have no idea what’s happening here, I can’t think of anything that’s causing this either, is this a NodeJS bug? I feel like it could be.

const games = JSON.parse(fs.readFileSync("./lib/database/games/chess/chess_games.json"))
console.log(games, 'outside if statement') // Here it outputs just fine
if (games[interaction.guild.id] == undefined) {
    console.log(games, 'inside if statement') // Here is where it breaks
    games[interaction.guild.id] = {
        games: {},
        players: {},
        amount_of_games: 0
    }
    fs.writeFileSync("./lib/database/games/chess/chess_games.json", JSON.stringify(games, null, 2));
    const games = JSON.parse(fs.readFileSync("./lib/database/games/chess/chess_games.json"))
}

This is the error:

ReferenceError: Cannot access 'games' before initialization
    at Object.execute (C:\Users\aschr\Dropbox\Coding\Javascript\entropic_bot\lib\database\bot\commands\chess.js:40:4)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Client.<anonymous> (C:\Users\aschr\Dropbox\Coding\Javascript\entropic_bot\index.js:44:3)

>Solution :

You have two variables with the same name.

Change the name of one of them

The second games is tried to be accessed instead of the first one because of hoisting. That’s why you are getting the error

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading