JavaScript中的if语句中不会保留对变量值的更改

时间:2019-05-09 07:34:02

标签: javascript

我通过使用定义的字符串调用setAndCheck函数内的变量来将其值设置为1。该值已设置,但是当我稍后调用该函数以稍后检查该值时,似乎尚未应用更改,因此未执行相关的if语句。

该函数的工作是,如果以适当的方式调用,则将1赋给参数,然后调用该函数以检查是否已设置并返回1。如果不是,则最后仅返回0。

function setAndCheck(arg) {
  var first_one = 0;
  var second_one = 0;
  if (arg == "setIt1")
    first_one = 1;
  else if (arg == "setIt2")
    second_one = 1;
  else if (arg == "checkIt1" && first_one)
    return 1;
  else if (arg == "checkIt2" && second_one)
    return 1;
  return 0;
}

在用"setIt1""setIt2"设置两个变量之后,我期望输出1。但是该函数仍然返回0,这意味着用"checkIt1""CheckIt2"调用时变量的值为0。

3 个答案:

答案 0 :(得分:2)

每次在函数内部定义一个变量时,由于重新声明该变量,因此只要您再次调用该函数,该变量就会重置。要使变量持久存在,您需要通过将其置于函数之外来使其在全局范围内可用。

     var first_one = 0;
     var second_one = 0;

    function setAndCheck(arg){
      if (arg == "setIt1")
      first_one=1;
      else if (arg == "setIt2")
      second_one=1;
      else if (arg == "checkIt1" && first_one)
        return 1;
      else if (arg == "checkIt2" && second_one)
        return 1;
      return 0;
    }

答案 1 :(得分:0)

  

我稍后调用该函数以稍后检查值,看起来像那样   更改尚未应用,因此相关的if语句   没有执行。

每次调用该函数都会再次创建该变量。因此,该值将永远不会保存。

您可以在函数外部创建变量,然后分配值。 下次您无需调用该函数,而直接使用该值

答案 2 :(得分:0)

据我所知,问题在于您在函数范围内声明并初始化了变量。

让我们从头开始。

  1. 使用arg“ setIt1”调用该函数。 first_one和second_one是 设置为0,然后first_one设置为1。
  2. 使用arg“ setIt2”调用该函数。 first_one和second_one 重置为0,然后将second_one设置为1。
  3. 使用arg“ checkIt1。调用该函数。first_one和second_one重置为0,因此(arg ==” checkIt1“ && first_one)返回false,从而导致该函数返回0。

edit:第二个问题是局部变量(函数结束时在函数内部声明的变量不复存在。因此,每次执行并退出该函数时,first_one和second_one都会消失。唯一的保留值的方法是在调用函数之前先声明first_one和second_one。