调用自身的函数没有返回真

3
我调用了一个名为“returnsTrue”的函数,当参数“redo”设置为true时,它会调用自身。然后,我再次调用相同的函数“returnsTrue”,但是这次将参数“redo”设置为false,并且希望返回true。但实际上,我只得到了“undefined”的结果。
我真的无法理解这里发生了什么:
function returnsTrue(redo){
    if(redo){
    console.log('Restart Function');
    returnsTrue(false);
  }else{
    console.log('It returns true');
    return true;
  }
}

if(returnsTrue(true)){
    console.log('1');
}else{
    console.log('2');
}

var isTrue = returnsTrue(true);
console.log(isTrue);
// is undefined

Check https://jsfiddle.net/8820r2ug/


@Armin 这是一个同步的方法 - 不需要等待。 - Reinstate Monica Cellio
2个回答

6

if语句有两个分支。

这两个分支中只有一个包含return语句。

如果它进入了if(而不是else),那么就没有return语句,它会返回undefined

您需要在if/elseif一侧添加一个return语句。


非常感谢您的回答!代码块中的第4行应该是: return returnsTrue(false); - Simon S.
2
换句话说,在if语句中使用return returnsTrue(false);而不是returnsTrue(false); - Taron Saribekyan

3

现在发生的情况是分配调用未返回任何值,而是函数内部的调用返回 true,因此你的赋值最终是未定义的。尝试像这样在函数内返回函数调用:

function returnsTrue(redo){
    if(redo){
    console.log('Restart Function');
    return returnsTrue(false);
  }else{
    console.log('It returns true');
    return true;
  }
}

if(returnsTrue(true)){
    console.log('1');
}else{
    console.log('2');
}

var isTrue = returnsTrue(true);
console.log(isTrue);
// is undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接