因子函数输出不显示,不会从文本框中获取值

时间:2018-04-03 14:36:16

标签: javascript html

我尝试创建的代码运行一个函数,该函数接受您在文本框中放置的任何值并将其因子化。当我从提示中获取值时它工作正常,但现在我试图使它看起来更整洁并从文本框中获取值,它给了我“超出最大调用堆栈大小”错误并赢得了'正确执行。我想我的函数找到文本框值并在函数中输入它有问题。

window.onerror = function(message, url, line, col) {
  console.error("Error: " + message + "\nURL: " + url + "\nLine: " + line + "\nColumn: " + col);
  return true;
};
var x = document.getElementById("factortext").value;
function factorial(x) {
  if (x === 0) {
    return 1;
  }
  return x * factorial(x - 1);
}
console.log(factorial(5));
document.getElementById("display").innerHTML = factorial(x);
<h1 id="title">Factorialize!</h1>
<input type="text" id="factortext" name="factor" value="Input Number here!"></input><br><br>
<button onclick="factorial()">Submit</button>
<p id="display"></p>

3 个答案:

答案 0 :(得分:1)

您需要一个回调函数。只需让该函数调用阶乘。

您原来的onClick函数没有参数。

window.onerror = function(message, url, line, col) {
  console.error("Error: " + message + "\nURL: " + url + "\nLine: " + line + "\nColumn: " + col);
  return true;
};

console.log(factorial(5));

function factorial(x) {
  if (x === 0) return 1;
  return x * factorial(x - 1);
}

function calculateFactorial() {
  var x = document.getElementById("factortext").value;
  document.getElementById("display").innerHTML = factorial(x);
}
<h1 id="title">Factorialize!</h1>
<input type="text" id="factortext" name="factor" placeholder="Input Number here!" />
<br><br>
<button onClick="calculateFactorial()">Submit</button>
<p id="display"></p>

答案 1 :(得分:0)

一旦脚本运行,您就会获得该值,而不是在按下按钮后立即获取该值。相反,设置一个单独的函数,在按下按钮时调用该函数,从输入然后获取值,将其转换为数字,然后调用factorial并显示结果。 (例如,大多数现有代码,包含在按钮单击调用的函数中。)

答案 2 :(得分:0)

上面的其他人已经给出了解决方案,我只想解释为什么你遇到了无限循环。

当您单击该按钮时,您的代码(<button onclick="factorial()">)将调用factorial()而不带参数。这意味着,在函数内部,x将为undefined。现在,在第一行,检查严格的相等性:(x === 0)。未定义的值不严格等于零,因此您的函数不会在此处退出;相反,它继续前进并尝试从undefined中减去1,这会产生NaN(“不是数字”)。然后,它以factorial()为参数调用NaN。同样,NaN不等于0(NaN的定义特征是它不等于任何东西,甚至不等于它!),所以你的函数不会退出,而是继续减去来自NaN的1,结果是 - 您猜对了:NaN。所以你的函数会一直持续下去,直到调用堆栈溢出。

如果您在第一行检查“假值”:

if (!x) return 1;

然后如果没有参数调用,你的函数将返回1。假值可以是0,undefinednull,空字符串或NaN