在Javascript循环中重新评估布尔表达式

时间:2018-08-29 12:35:05

标签: javascript loops while-loop boolean expression

有人可以帮助我通过此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

     

false

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

  

在do while循环内:x为2

     

true

     

在do while循环内:x为-1

     

true

     

在do while循环内:x为-1

     

true

似乎布尔表达式没有被重新求值,而是一直保持x =2。有人在这里对通用原理有所了解吗?

感谢您的答复。

4 个答案:

答案 0 :(得分:0)

声明

let condition = (x > 0);

被评估一次。这就是语句在JavaScript以及许多非常常见的语言(如它)中的工作方式。 (x > 0)的值的赋值更改了变量condition的值,仅此而已。 conditionx或任何其他变量之间没有建立永久关系。换句话说,该语句的意思是

  

比较x为0,如果更大,请将condition的值设置为true,否则将其设置为false

不是是指

  

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

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

答案 1 :(得分:0)

只是在开始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);

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

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

每次循环后是否请求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));