Javascript循环中布尔表达式的重新赋值
有人能帮我了解一下这个JavaScript代码的以下问题吗:Javascript循环中布尔表达式的重新赋值,javascript,loops,while-loop,boolean,expression,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 假的 相反,我得到了一个无休止的循环: 内
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。有人知道这里工作的一般原则吗
谢谢你的回复。声明
let condition = (x > 0);
被评估一次。这就是JavaScript和许多非常常见的语言中语句的工作方式。赋值(x>0)
会改变变量条件的值,就是这样。在条件
和x
或任何其他变量之间没有建立永久关系。换句话说,这句话意味着
将x
与0进行比较,如果大于0,则将条件的值设置为true
,否则设置为false
它并不意味着
使条件
变量始终显示x
是否大于零
在JavaScript中,使代码可重用的方法是创建函数。在启动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);
JS是一种顺序编程语言,这意味着它会一行一行地进行编程,除非有一个循环或statemenet或诸如此类的东西,所以当然表达式不会重新计算自身,而应该是“do while”中的表达式
或者只是把它作为循环的条件
let x = 2;
do {
console.log("inside do while loop: x is " + x);
x = -1;
console.log(x > 0);
} while (x > 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));
条件
在循环之前计算。它不应该在每次引用时都重新计算,因为它是一个表达式而不是一个函数。非常感谢大家!
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));