【问题标题】:Reevaluation of a boolean expression in a Javascript loop在 Javascript 循环中重新评估布尔表达式
【发布时间】:2019-02-04 06:03:49
【问题描述】:

有人可以帮我理解这段 JavaScript 代码的以下问题吗:

let x = 2;
let condition = (x > 0);
do {
     console.log("inside do while loop: x is " + x);
     x = -1;
    console.log(condition);
} while (condition);

我希望得到以下输出:

在do while循环内:x是2

相反,我得到了一个无限循环:

在do while循环内:x是2

是的

在do while循环内:x是-1

是的

在do while循环内:x是-1

是的

布尔表达式似乎没有被重新计算,而是保持 x = 2。有人知道这里的一般原理吗?

感谢您的回复。

【问题讨论】:

  • condition 在循环之前计算。它不应该在每次下一个引用时重新评估,因为它是一个表达式而不是一个函数。
  • 非常感谢大家!

标签: javascript loops while-loop boolean expression


【解决方案1】:

声明

let condition = (x > 0);

被评估一次。这就是 JavaScript 和许多非常常见的类似语言中语句的工作方式。 (x > 0) 的值的 赋值 改变了变量 condition 的值,就是这样。 conditionx 或任何其他变量之间没有建立永久关系。换句话说,这句话的意思是

x与0进行比较,如果大于则将condition的值设置为true,否则设置为false

意味着

使condition 变量始终显示x 是否大于零。

在 JavaScript 中,使代码可重用的方法是创建函数

【讨论】:

    【解决方案2】:

    条件只是在开始 do while 循环之前进行评估,因此,为了避免您遇到的无限循环,您需要评估条件:

    let x = 2;
    let condition = (x > 0);
    do {
         console.log("inside do while loop: x is " + x);
         x = -1;
        console.log(condition);
        condition = (x > 0);
    } while (condition);
    

    【讨论】:

      【解决方案3】:

      JS 是一种顺序编程语言,这意味着它会逐行执行,除非有循环或 statemenet 或类似这样的情况,所以表达式当然不会重新评估自己,你应该但是里面的表达式“一边做”

       let x = 2;
      do {
        console.log("inside do while loop: x is " + x);
       x = -1;
       console.log(condition);
       let condition = (x > 0);
      } while (condition);
      

      或者只是让它成为循环的条件

       let x = 2;
      do {
        console.log("inside do while loop: x is " + x);
       x = -1;
       console.log(x > 0);
      } while (x > 0);
      

      【讨论】:

        【解决方案4】:

        分配变量后,每次调用它都会保持不变,有很多方法可以改变这种行为:

        每次循环后请求x > 0

        do {
             console.log("inside do while loop: x is " + x);
             x = -1;
             console.log(condition);
        } while (x > 0);
        

        或者写一个函数来计算一个变量:

        var greaterZero = function(v) {return v>0}
        
        do {
            console.log("inside do while loop: x is " + x);
             x = -1;
         console.log(condition);
        } while (greaterZero(x));
        

        【讨论】:

          猜你喜欢
          • 2013-12-15
          • 1970-01-01
          • 2017-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-06
          相关资源
          最近更新 更多