为什么我能提醒但不能回来?

时间:2014-01-16 01:51:23

标签: javascript

我知道周围有类似的问题,但这真的是一个简单的版本。我不明白为什么我不能在这里返回变量,虽然我可以看到警报中的值。 这有效:

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

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

    theTest(0);

但这会返回undefined:

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

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

    alert(theTest(0));

为什么为什么?

3 个答案:

答案 0 :(得分:1)

试试这个:

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

alert(theTest(0));

答案 1 :(得分:1)

因为else statement没有返回任何内容。你在它之外调用theTest函数并警告返回值,但是你的参数是0,所以函数将以else语句结束,但在你的代码中,else语句不返回任何内容,因此警告'undefined'。 试试这个:

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

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

alert(theTest(0));

答案 2 :(得分:0)

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

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

函数调用是以堆栈的形式进行的(Last-In-First-Out即LIFO),所以这里你的第一个调用将位于堆栈的底部,在你的情况下,你只返回最后一次调用的数据(on堆栈的顶部)但是,你需要将它一直向下返回到第一个调用

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

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

    alert(theTest(0));