Javascript变量范围返回未定义

时间:2015-09-14 23:45:58

标签: javascript variables recursion scope undefined

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

此函数将数字中的数字相加,将它们相加,如果结果数字超过一位,则将结果数字递归检测回函数进行处理。我的回复声明给了我" 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.

1 个答案:

答案 0 :(得分:3)

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

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