Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript循环中布尔表达式的重新赋值_Javascript_Loops_While Loop_Boolean_Expression - Fatal编程技术网

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 假的 相反,我得到了一个无休止的循环: 内

有人能帮我了解一下这个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。有人知道这里工作的一般原则吗

谢谢你的回复。

声明

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