Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 方法未定义为函数(定义为函数时)_Javascript_Node.js_Function_Discord_Discord.js - Fatal编程技术网

Javascript 方法未定义为函数(定义为函数时)

Javascript 方法未定义为函数(定义为函数时),javascript,node.js,function,discord,discord.js,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 = r

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

function rootEmbed()
{
    var embed = new Discord.RichEmbed()
    .setColor(config.embedColor);
    return embed;
    //returns an object
}
稍后在同一文件中,我定义了另一个调用上述函数的函数,如下所示:

function commandList()
{
    var embed = rootEmbed();
    //....
}
调用该函数不会导致任何问题,但是调用以下函数会返回一个错误

(节点:4988)未处理的PromisejectionWarning:未处理的承诺拒绝(拒绝id:1):TypeError:rootEmbed不是函数
以下是功能:

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();
    //...
}

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

function rootEmbed (){//...code here}
var rootEmbed = undefined;
要解决此问题,请更改以下内容:

function voidTrader(trader)
{
    var rootEmbed = rootEmbed();
    //...
}
对这样的事情:

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

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

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

year
var
声明两次。

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

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

year
var
声明两次。

非常感谢。我现在觉得自己很愚蠢。。。这一直是一个变量名的问题!(很乐意帮忙:)非常感谢。我现在觉得自己很愚蠢。。。这一直是一个变量名的问题!(很乐意帮忙:)威尔弗雷德解释得很好。当您将下面的代码移出函数时,您将不会面对它。var rootEmbed=rootEmbed()@威尔弗雷德解释得很好。当您将下面的代码移出函数时,您将不会面对它。var rootEmbed=rootEmbed();