Javascript 为什么我可以提醒但不返回?

Javascript 为什么我可以提醒但不返回?,javascript,Javascript,我知道这方面也有类似的问题,但这确实是一个简单的版本。我不明白为什么我不能在这里返回变量,尽管我可以在警报中看到值。 这项工作: function theTest(x){ var myNum = x + 1 if(myNum == 5){ alert(myNum); } else{ theTest(myNum); } } theTest(0);

我知道这方面也有类似的问题,但这确实是一个简单的版本。我不明白为什么我不能在这里返回变量,尽管我可以在警报中看到值。 这项工作:

function theTest(x){
        var myNum = x + 1

        if(myNum == 5){
            alert(myNum);
        }
        else{
            theTest(myNum); 
        }
    }

    theTest(0);
但这会返回未定义的:

function theTest(x){
        var myNum = x + 1

        if(myNum == 5){
            return myNum;
        }
        else{
            theTest(myNum); 
        }
    }

    alert(theTest(0));
为什么?

试试这个:

function theTest(x){
    var myNum = x + 1
    if(myNum == 5)
        return myNum;
    return theTest(myNum);
}

alert(theTest(0));
function theTest(x){
    var myNum = x + 1

    if(myNum == 5){
        return myNum;
    }
    else{
        return theTest(myNum); 
    }
}

alert(theTest(0));

因为您的
else语句
不返回任何内容。您在函数外部调用了test函数,并警告返回值,但您的参数为0,因此函数将以else语句结尾,但在代码中,else语句不返回任何内容,因此警告“未定义”。 试试这个:

function theTest(x){
    var myNum = x + 1

    if(myNum == 5){
        return myNum;
    }
    else{
        return theTest(myNum); 
    }
}

alert(theTest(0));

它将对函数进行嵌套/递归调用。因此,在最后一行中,当您启动流程时,只有在您向其返回某个内容(即第一次调用)时,它才会获得一个值

因此,多个/嵌套调用也需要多个相应的返回。 或者(在代码中)myNum将返回到对“theTest”的第二个最后调用(将在最后一个else语句中),并仅在那里完成

函数调用是以堆栈的形式进行的(后进先出即后进先出),因此在这里,您的第一个调用将位于堆栈的底部,并且在您的情况下,您只返回最后一个调用的数据(在堆栈的顶部),但是,您需要将数据一直返回到堆栈的底部,返回到第一个调用

function theTest(x){
            var myNum = x + 1

            if(myNum == 5){
                return myNum;
            }
            else{
                return theTest(myNum); 
            }
        }

    alert(theTest(0));

您需要
返回测试(myNum)