Discord.js报错:Cannot access 'lol' before initialization 解决咨询
解决Discord机器人Embed发送随机图片时的ReferenceError错误
嘿,这个错误很好解决,我来帮你捋清楚问题出在哪~
你看到的ReferenceError: Cannot access 'lol' before initialization,核心问题是你在定义变量lol的同一行代码里,提前使用了还没完成初始化的lol变量。看这行出错的代码:
let lol = Math.floor (Math.random() * (lol - 1 + 1)) + 1;
JavaScript里let声明的变量存在“暂时性死区”,在变量完成赋值前,你没法在同一作用域里使用它,所以这行代码必然报错。
而且你还犯了一个小错误:原来的imageName1 = ${maxImageNumber1}.gif`` 只会固定发送213.gif,根本没用到随机数,完全达不到随机图片的效果。
其实你看自己写的aes分支逻辑是完全正确的,gif分支只要照搬这个逻辑就行,把错误的变量替换成正确的最大数值变量就行。修复后的代码如下:
case 'gif': let maxImageNumber1 = 213; // 用maxImageNumber1代替未初始化的lol,生成1到213之间的随机整数 let imageNumber1 = Math.floor(Math.random() * maxImageNumber1) + 1; // 这里用生成的随机数imageNumber1来命名图片,实现随机效果 let imageName1 = `${imageNumber1}.gif`; let imagePath1 = `./GIF/${imageName1}`; let file2 = new Discord.MessageAttachment(imagePath1); let embed1 = new Discord.MessageEmbed(); embed1.setImage(`attachment://${imageName1}`); message.channel.send({ files: [file2], embed: embed1 }); break; case 'aes': let maxImageNumber = 100; let imageNumber = Math.floor(Math.random() * maxImageNumber) + 1; let imageName = `${imageNumber}.jpg`; let imagePath = `./images/${imageName}`; let file1 = new Discord.MessageAttachment(imagePath); let embed = new Discord.MessageEmbed(); embed.setImage(`attachment://${imageName}`); message.channel.send({ files: [file1], embed: embed }); break;
另外我还简化了随机数的计算:Math.floor(Math.random() * maxImageNumber) + 1 和你原来的Math.floor (Math.random() * (maxImageNumber - 1 + 1)) + 1 效果完全一样,只是写法更简洁。
这样修改后,你的gif命令就能正常生成1到213之间的随机数,然后对应发送./GIF文件夹里的随机gif图片啦~
内容的提问来源于stack exchange,提问作者user13746070
相关产品推荐
相关产品推荐

