为什么我的递归函数调用没有返回值?

时间:2016-01-27 21:44:12

标签: javascript recursion closures

我有以下代码,试图返回两个数字之间的范围,而内部函数没有返回值。它只返回[功能]。谁能告诉我为什么?

var range = function(num1, num2) {
    var output = [];  
    return function range2 () {
        if (num2 - num1 === 2) {
            return [num1+1];
        }
        else if (output.length + 1 === num2 - num1) {
            return output;
        }
        else if (output.length + 1 !== num2 - num1) {
            output.push(num1 + 1);
        }
        return range2(num1 + 1, num2);
    };
};

//更新:这是我的代码,最终正常工作,FWIW:

var range = function(num1, num2) {
    var list = [];
    var range2 = function(num1, num2) {
        list.push(num1 + 1);
        if (num2 - num1 === 2) {
            return list;
        }
        else {
            return range2(num1 + 1, num2);
        }
    };
    return range2(num1, num2);
};

2 个答案:

答案 0 :(得分:1)

您的退货将返回定义。如果您尝试返回函数的执行,则需要添加()

见这里:

var range = function(num1, num2) {
  var output = [];  
  return function range2 () {
    if (num2 - num1 === 2) {
        return [num1+1];
    }
    else if (output.length + 1 === num2 - num1) {
        return output;
    }
    else if (output.length + 1 !== num2 - num1) {
        output.push(num1 + 1);
    }
    return range2(num1 + 1, num2);
  }();  // <----  this will execute the defined function.
};

答案 1 :(得分:0)

range()函数从不调用range2()。它只返回函数表达式。

此外,range2()需要参数。

&#13;
&#13;
var range = function(num1, num2) {
  var output = [];

  function range2(num1, num2) {
    if (num2 - num1 === 2) {
      return [num1 + 1];
    } else if (output.length + 1 === num2 - num1) {
      return output;
    } else if (output.length + 1 !== num2 - num1) {
      output.push(num1 + 1);
    }
    return range2(num1 + 1, num2);
  };
  return range2(num1, num2);
};

alert(range(1, 10));
&#13;
&#13;
&#13;