未定义为函数的方法(同时定义为一个)

时间:2018-12-02 00:37:36

标签: javascript node.js function discord discord.js

我正在尝试一个奇怪的问题:在代码的开头,我定义了一个函数,如下所示:

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

如果您需要完整的代码,则可以here找到它。

谢谢!

2 个答案:

答案 0 :(得分:2)

这是可变吊装和可变阴影的组合。初始化变量var x = 5时,会发生var x提升到代码文件顶部的情况。但是,功能声明更高。这意味着在您的文件运行时,情况就是这样:

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

要解决此问题,请更改以下内容:

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

对于这样的事情:

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

答案 1 :(得分:0)

第25-26行还有另一个问题:

var year = "" + stamp.getYear();
var year = twoDigits("20" + year.substr(-2));

yearvar声明两次。