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)这个问题实际上很有趣。第一个函数将显示警报的原因是,当您仍在myNum变量的作用域内时调用警报。第二个函数将执行相同数量的写入,但由于递归函数返回未定义的值,因此无法传回任何值。Arvind有一个正确的解决方案。cgatian,请你发一个回复,这样我可以给你评分。问题不是怎么做,而是我意识到怎么做。我不明白为什么,尽管我知道范围是个问题。我认为你的解释是正确的。我觉得这是危险的:你必须在正确的地方发帖才能得分。呃,这很有效,但我想知道为什么。返回函数对我来说没有意义。。。去哪里?变量?我已经知道这是可行的。它将对函数进行嵌套/递归调用。因此,在最后一行中,当您启动流程时,仅当您向其返回某个内容(即第一次调用)时,才会返回带有变量的流程。因此,多个/嵌套调用也需要多个相应的返回。我知道这是可行的,但我不理解为什么else必须返回而不是只调用函数。在许多其他语言中,我可以在函数定义之后调用它。如果将函数返回给变量,则返回函数没有意义。。。Cgatian给出了正确的答案——他给出了原因,但没有给出答案。