有人可以帮助我通过此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。有人在这里对通用原理有所了解吗?
感谢您的答复。
答案 0 :(得分:0)
声明
let condition = (x > 0);
被评估一次。这就是语句在JavaScript以及许多非常常见的语言(如它)中的工作方式。 (x > 0)
的值的赋值更改了变量condition
的值,仅此而已。 condition
和x
或任何其他变量之间没有建立永久关系。换句话说,该语句的意思是
比较
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));