首页 > 解决方案 > 方法未定义为函数(定义为一个)

问题描述

我正在尝试一个奇怪的问题:在我的代码开头,我定义了一个这样的函数:

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()结果却非常好。我究竟做错了什么?

如果你想要完整的代码,你可以在这里找到。

提前致谢!

标签: javascriptnode.jsfunctiondiscorddiscord.js

解决方案


这是可变提升和可变阴影的组合。当你初始化一个变量var x = 5时,会发生什么var x被提升到代码文件的顶部。然而,函数声明被提升得更高。这意味着当您的文件运行时,这就是正在发生的事情:

function rootEmbed (){//...code here}
var rootEmbed = undefined;

要解决此问题,请更改此:

function voidTrader(trader)
{
    var rootEmbed = rootEmbed();
    //...
}

对于这样的事情:

function voidTrader(trader)
{
    var rootEmbedResult = rootEmbed();
    //...
}

推荐阅读