Javascript答案没有显示

时间:2018-03-15 12:26:37

标签: javascript html arrays

在下面的代码中,我制作了一个小脚本,它基本上计算了用户输入的数字的平方根。弹出窗口显示,用户输入他想要计算出的平方根的数字。该脚本在我测试时工作正常。我的问题是 a ,我想显示的值没有显示。有人可以指出问题是什么吗?

function evaluate() {
  var input = prompt("Please enter your input");
  var array = new Array();

  function squareroot(x, y) {
    if (!y) {
      // Take an initial guess at the square root
      y = x / 2;
    }
    var z = x / y; // Divide the inputted number by the initial guess
    var a = (z + y) * 1 / 2; // *Use average of y and z as our new guess
    if (y == a) {
      // *The new guess is the same as the old guess; further guesses
      // *can get no more accurate so we return this guess
      return y;
    }
    // Recursively solve for closer and closer approximations of the square root
    return squareroot(x, a);
  }
  document.writeln("Your calculation is: ");
  document.writeln(a);

}

evaluate();
body {
  color: white;
  background-color: black;
  font-weight: bold;
  font-size: 20px;
  text-align: center;
  margin-top: 250px;
}
<h2>Online RPN Calculator</h2>

5 个答案:

答案 0 :(得分:0)

首先,您永远不会在代码中的任何位置调用squareroot函数。

其次,你只从prompt获得价值,但你永远不会使用它。

A simple prompt() explanation

第三,a函数无法访问变量evaluate,因为它的作用域是squareroot函数。

More about JavaScript scoping here

深入解释1&amp; 2

evaluate函数中,您要做的第一件事就是定义变量input并将其分配给prompt()函数。

提示功能的工作方式是暂停脚本执行,直到用户提示答案为止。

通过此操作,您可以使用input检查是否提供了if-else

if (input !== null){
    // Run this code if `input` is provided.
}

// Stops the function
if (input === null){
    return;
}

在下面的演示中,我使用它来运行squareroot函数(如果提供了它的值)并将其用作x的第一个参数squareroot

深入解释3

在原始代码中,变量asquareroot函数内定义。因此,由于scopingevaluate函数无法看到其值。因此,行document.write(a)无法获得a的值,因为a未定义。{/ p>

evaluate函数中定义的每个变量都可以通过squareroot函数看到。

使用此功能,我们可以在a函数中定义变量evaluate,而不是squareroot函数。

因此document.write(a)知道a是什么。

&#13;
&#13;
function evaluate() {
    
    var array = new Array();
    var a = undefined;
    var input = prompt("Please enter your input");
    
    if (input) squareroot(input);

    function squareroot(x,y) {
        if (!y) {
            // Take an initial guess at the square root
            y = x/2;
        }
        var z = x / y;              // Divide the inputted number by the initial guess
        a = (z + y) * 1/2;          // *Use average of y and z as our new guess
        if (y == a) {          
            // *The new guess is the same as the old guess; further guesses
            // *can get no more accurate so we return this guess
            return y;
        }
        // Recursively solve for closer and closer approximations of the square root
        return squareroot(x, a);
    }
    
    document.writeln("Your calculation is: ");
    document.writeln(a);

}

evaluate();
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您需要调用squareroot函数。将document.writeln(a);更改为document.writeln(squareroot(input));会使其有效。还添加了一个检查,给出的输入不是NaN,以避免无限递归。 if (!isNaN(input) && input)

答案 2 :(得分:0)

我已做出以下更改,请检查此

答案 3 :(得分:-1)

正如@ n​​8wrl所注意到的那样,您没有为您的功能提供用户输入,并且您有“范围问题”这样的问题。变量

&#13;
&#13;
<html>

<head>
  <title>Squareroot calculator</title>
  <style type="text/css">
    body {
      color: white;
      background-color: black;
      font-weight: bold;
      font-size: 20px;
      text-align: center;
      margin-top: 250px;
    }
  </style>
  <script type="text/javascript">
  function squareroot(x, y) {
if (!y) {
          // Take an initial guess at the square root
          y = x / 2;
      }
      var z = x / y; // Divide the inputted number by the initial guess
      var a = (z + y) * 1 / 2; // *Use average of y and z as our new guess
      if (y == a) {
          // *The new guess is the same as the old guess; further guesses
          // *can get no more accurate so we return this guess
          return y;
      }
      // Recursively solve for closer and closer approximations of the square root
      return squareroot(x, a);
  }
  var input = prompt("Please enter your input");
  document.writeln("Your calculation is: ");
  document.writeln(input);
  </script>
</head>

<body>
  <h2>Online RPN Calculator</h2>
</body>

</html>
&#13;
&#13;
&#13;

答案 4 :(得分:-2)

您应该将用户输入的input值传递给您要进行计算的函数或任何其他数学运算。

您的代码似乎令人困惑。