在下面的代码中,我制作了一个小脚本,它基本上计算了用户输入的数字的平方根。弹出窗口显示,用户输入他想要计算出的平方根的数字。该脚本在我测试时工作正常。我的问题是 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>
答案 0 :(得分:0)
首先,您永远不会在代码中的任何位置调用squareroot
函数。
其次,你只从prompt
获得价值,但你永远不会使用它。
第三,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
在原始代码中,变量a
在squareroot
函数内定义。因此,由于scoping,evaluate
函数无法看到其值。因此,行document.write(a)
无法获得a
的值,因为a
未定义。{/ p>
evaluate
函数中定义的每个变量都可以通过squareroot
函数看到。
使用此功能,我们可以在a
函数中定义变量evaluate
,而不是squareroot
函数。
因此document.write(a)
知道a
是什么。
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;
答案 1 :(得分:0)
您需要调用squareroot函数。将document.writeln(a);
更改为document.writeln(squareroot(input));
会使其有效。还添加了一个检查,给出的输入不是NaN,以避免无限递归。 if (!isNaN(input) && input)
答案 2 :(得分:0)
我已做出以下更改,请检查此
答案 3 :(得分:-1)
正如@ n8wrl所注意到的那样,您没有为您的功能提供用户输入,并且您有“范围问题”这样的问题。变量
<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;
答案 4 :(得分:-2)
您应该将用户输入的input
值传递给您要进行计算的函数或任何其他数学运算。
您的代码似乎令人困惑。