【问题标题】:javascript recursion error - function within a functionjavascript递归错误 - 函数内的函数
【发布时间】:2015-10-26 19:34:00
【问题描述】:

我有以下功能:

function getRange() {

    // generate a range of values from value up to climit
    // excluding climit
    var countup = function(value, climit) {
        if (value < climit) {
            console.log(value);
            return countup(value + 1, climit);
        }
    };

   // gather input from the form
   var x = document.getElementById("range_form").range_x.value;
   var y = document.getElementById("range_form").range_y.value;

   // Validate the input
    if (isNaN(x) || isNaN(y)) {
        console.log("Both values have to be integers!!!");
    } else {
        // run the countup fonction
        countup(x, y);
    }
}

现在函数 countup(单独)按我的预期工作。一旦我把它放在 getRange 函数中,它就会停止正常工作。当我在表单中输入一些值(例如 2 和 9)时,控制台中的输出是无穷无尽的 1111111111111111 然后是错误:Uncaught RangeError: Maximum call stack size exceeded.

请指教

【问题讨论】:

  • 因为您看到的是1111111111111111,所以您似乎使用的是字符串而不是整数。尝试将您的 var x, y 变量包装在 parseInt 中(例如 parseInt(document.getElementById("range_form").range_x.value, 10)

标签: javascript recursion uncaught-exception


【解决方案1】:

xy 是字符串。因此,

  • value + 1 导致连接,并且
  • &lt; 进行词法比较(例如,"211111" &lt; "3" 为真)

使用parseInt(..., 10)将您的输入转换为数字:

var x = parseInt(document.getElementById("range_form").range_x.value, 10);

【讨论】:

  • 谢谢两位。就是这样。结尾的,10是什么意思?
  • @Wasteland 它强制以 10 为底。没有它,也允许使用十六进制(例如,parseInt("0xdeadbeef") 以整个十六进制值为基础,而 parseInt("0xdeadbeef", 10) 仅解析第一个零并停止在 x )
  • That's the radix: "2 到 36 之间的整数,表示上述字符串的基数(数学数字系统中的基数)。指定 10 表示人类常用的十进制数字系统。始终指定此参数以消除读者混淆并保证可预测的行为。”
猜你喜欢
  • 2021-11-14
  • 1970-01-01
  • 2019-07-02
  • 2021-07-19
  • 2015-07-14
  • 2016-07-28
  • 2022-11-17
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多