Javascript 变量作用域返回未定义

标签 javascript variables recursion scope undefined

所以我知道这可能是重复的,但是在一个多小时内查看了看似相同主题的各种答案后,我一直无法弄清楚如何解决我的问题。

此函数将数字中的数字分开,将它们相加,如果结果数字多于一位,则递归地将结果数字返回到函数中进行处理。我的返回声明给了我“未定义”,我不确定为什么。如果它是在 if 语句中定义的,我不明白为什么它在 else 语句中不是这样:

function digital_root(n) {
  var numArray = n.toString().split('');
  var accumulator = 0;
  for(var i = 0; i < numArray.length; i++){
      accumulator += parseInt(numArray[i]);
  }
  if(accumulator >= 10){
    digital_root(accumulator);
  }
  else{return accumulator};

};

digital_root(942);//should be 6, after 15 is passed back into digital_root()
// but output is undefined.

最佳答案

您需要返回递归调用的结果,否则它无法向上传播堆栈。你的最后一个 else 也是无关紧要的。

function digital_root(n) {
  var numArray = n.toString().split('');
  var accumulator = 0;
  for(var i = 0; i < numArray.length; i++){
      accumulator += parseInt(numArray[i]);
  }
  if(accumulator >= 10){
    return digital_root(accumulator);
  }
  return accumulator;

};

digital_root(942);//ta-daaaa

关于Javascript 变量作用域返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575574/

相关文章:

javascript - 在远程主机上导入所有模块时的包裹构建问题

bash - 局部变量 `unset` 的奇怪行为

ios - Swift:通过全局文件更改永久变量

python - 在 python 中展开列表

javascript - 使用 javascript 或 jQuery 更新两个复选框选择的价格

javascript - javascript 函数 toLocaleDateString() 的错误日期

javascript - 如何使用for循环在javascript中做表单提交?

linux - ~ 被 bash 中的变量值替换

javascript - 为什么 setTimeout 在循环内与递归函数内无法正确执行

c++ - 不能在函数调用中使用 int 后递减