功能内部功能;变量不必要地变化,为什么? (JavaScript)的

时间:2015-12-05 21:21:38

标签: javascript

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



ReCalFN()




1 个答案:

答案 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"); }
   }

考虑避免全局变量和副作用。将您需要的变量作为参数传递。