首页 > 解决方案 > JavaScript 递归变量值未定义

问题描述

当我运行以下命令JS时,控制台正确记录a为字符串:“foo”,但返回值未定义。typeof()还说它是一个字符串。console.log从第 5 行到第 6 行(the和 the )没有变化return,那么这怎么会自发地变成未定义的呢?

let a = "foo";
let c = 0;
function test() {
  if (c === 5) {
    console.log(a);
    return a;
  } else {
    c++;
    test();
  }
}

标签: javascript

解决方案


在您的递归调用中,使用return test()

let a = "foo";
let c = 0;
function test() {
  if (c === 5) {
    console.log(a);
    return a;
  } else {
    c++;
    return test();
  }
}

说明:考虑test()原始代码中的第一次调用。如果c是 5,它会返回一个值,否则,它不会返回任何东西。当然它会执行第二次调用test(),但它不会将该调用的值返回给您的主程序。这就是为什么return需要声明的原因。同样的逻辑适用于所有test()wherec不等于 的调用5


推荐阅读