javascript - 方法未定义为函数(定义为一个)
问题描述
我正在尝试一个奇怪的问题:在我的代码开头,我定义了一个这样的函数:
function rootEmbed()
{
var embed = new Discord.RichEmbed()
.setColor(config.embedColor);
return embed;
//returns an object
}
稍后在同一个文件中,我定义了另一个调用上述函数的函数,如下所示:
function commandList()
{
var embed = rootEmbed();
//....
}
调用该函数不会出现问题,但是调用以下函数会返回一个错误,提示
(node:4988) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: rootEmbed is not a function
这是被告知的功能:
function voidTrader(trader)
{
var rootEmbed = rootEmbed();
//...
}
我无法弄清楚为什么该voidTrader()
方法会导致错误,而commandList()
结果却非常好。我究竟做错了什么?
如果你想要完整的代码,你可以在这里找到。
提前致谢!
解决方案
这是可变提升和可变阴影的组合。当你初始化一个变量var x = 5
时,会发生什么var x
被提升到代码文件的顶部。然而,函数声明被提升得更高。这意味着当您的文件运行时,这就是正在发生的事情:
function rootEmbed (){//...code here}
var rootEmbed = undefined;
要解决此问题,请更改此:
function voidTrader(trader)
{
var rootEmbed = rootEmbed();
//...
}
对于这样的事情:
function voidTrader(trader)
{
var rootEmbedResult = rootEmbed();
//...
}
推荐阅读
- autodesk-forge - Revit 中的计划在 Forge 查看器中成为图片
- codec - Alsa Underrun 后无播放
- .net - 是否可以在项目 .Net framework 3.5 中引用 Identity.Model 库?
- html - 为什么 HTML 有这么多颜色值(RGB、HEX、HSL、RGBA、HSLA)?
- java - 使用 Spring 为 2 个 DB 使用 2 个数据源
- entity-framework - EF6 OutOfMemoryException 使用 varbinary(max) 属性评估实体
- java - org.openqa.selenium.json.JsonOutput.write(Ljava/lang/Object;Ljava/lang/reflect/Type;) 由于 JsonException:尝试关闭不完整的 json 流
- jsp - 错误 JSP 中的复选框计数
- python - for 循环超过 2^n 个项目瓶颈
- c# - 更改 .NET Label 控件的高度以适合换行文本