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

Why is my recursive function call not returning a value?

本文关键字:返回值 函数调用 我的 递归 为什么      更新时间:2023-09-26

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

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);
};

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

看这里:

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.
};

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

此外,range2()需要接受论据。

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));