Javascript 递归函数返回未定义的

Javascript 递归函数返回未定义的,javascript,recursion,return,Javascript,Recursion,Return,我有一个计算税收的函数 function taxes(tax, taxWage) { var minWage = firstTier; //defined as a global variable if (taxWage > minWage) { //calculates tax recursively calling two other functions difference() and taxStep() tax = ta

我有一个计算税收的函数

function taxes(tax, taxWage) 
{
    var minWage = firstTier; //defined as a global variable
    if (taxWage > minWage) 
    {
        //calculates tax recursively calling two other functions difference() and taxStep() 
        tax = tax + difference(taxWage) * taxStep(taxWage);
        var newSalary = taxWage - difference(taxWage);
        taxes(tax, newSalary); 
    }
    else 
    {
        returnTax = tax + taxWage * taxStep(taxWage);
        return returnTax;
    }
} 

我不明白它为什么不停止递归。

您的递归有一个错误:

taxes(tax, newSalary);
如果
if
中的条件计算为true,则不返回任何内容。您需要将其更改为:

return taxes(tax, newSalary);

在函数的这一部分中,在
else

中有必要的
return
语句:

if (taxWage > minWage) {
    // calculates tax recursively calling two other functions difference() and taxStep() 
    tax = tax + difference(taxWage) * taxStep(taxWage);
    var newSalary = taxWage - difference(taxWage);
    taxes(tax, newSalary); 
}
您没有从函数或设置返回值
returnTax
。如果不返回任何内容,则返回值为
undefined

也许,你想要这个:

if (taxWage > minWage) {
    // calculates tax recursively calling two other functions difference() and taxStep() 
    tax = tax + difference(taxWage) * taxStep(taxWage);
    var newSalary = taxWage - difference(taxWage);
    return taxes(tax, newSalary); 
}

你的问题是什么?还有,这段代码和你问题的标题有什么关系?你说它会递归,但这里没有递归的代码。@raam86但很可能是这段代码有错…@raam86是的,就像怀疑的那样。@raam86我对我的代码犯了同样的错误。在我找到你的问题后,我意识到我的代码发生了什么,我在错误的地方查找错误。出于这个原因,我对你投了赞成票。这很有帮助,但我想知道为什么
return
是递归正确运行所必需的。如果你想让函数返回一个值,那么你必须返回一个值。在javascript中,没有返回的函数将返回未定义的函数。递归本身不需要返回(例如:打印出树中的节点),但如果希望函数返回某些内容,则它需要
return
。您可以通过在调试器中单步执行该函数来探索这一点。我想让我困惑的是,它在JavaScript中的工作原理是,我期望调用函数本身就足以实例化递归。例如;递增一个数字,然后调用函数并将其传递回自身。不管怎样,这都很有帮助,我只是好奇而已。