所以我几天前刚刚开始编写几行代码,我想用迄今为止获得的知识制作一个计算器,但出于一个我不知道的原因,在调用CalculationFN()
内{ {1}}我发现ReCalFN()
和num2
的变量发生了变化。为什么这样,我该如何解决?
//进入act
后,为什么num2
的变量变为未定义
我知道有更好的方法来制作计算器,但这是我想我的版本。
如果你建议任何事情请说,我很欣赏。 (对不起我的英文)谢谢你的阅读。
ReCalFN()

答案 0 :(得分:0)
您在num2
内声明ReCalFN
,因此num2
指的是新的本地变量而不是全局变量。由于JavaScript hoisting,所有变量声明都移动到函数的顶部。
因此,您的ReCalFN
功能与此相同:
function ReCalFN () {
// hoisted variables
var act;
var num2; // declared but not assigned, is not the global variable
act = prompt(" " + num1 + "\n New Action");
if ( (act == "+") || (act == "-") || (act == "*") || (act == "/") ||
(act == "%") ) {
// num2 is undefined
alert(num1); alert(act); alert(num2);
num2 = prompt("AnyNum"); // num2 has a value from now on
if ( ( num2 <= 0 ) || ( num2 > 0 ) ) {
// num2 is not undefined
alert(num1); alert(act); alert(num2);
CalculationFN ();
} else { alert("Error: no valid action"); }
} else { alert("Error: no valid value"); }
}
考虑避免全局变量和副作用。将您需要的变量作为参数传递。