我知道周围有类似的问题,但这真的是一个简单的版本。我不明白为什么我不能在这里返回变量,虽然我可以看到警报中的值。 这有效:
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));
为什么为什么?
答案 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));