JavaScript While循环条件变量未更新

时间:2018-10-24 19:53:35

标签: javascript while-loop increment

为什么以下逻辑不起作用?

警告:当您单击“运行代码段”时,以下内容将启动无限循环。

var i = 0;
var currentLocation = 1;

while(currentLocation !== 9){
    console.log(currentLocation);
    currentLocation += i;
    i++;
}

进入无限循环。但是,如果我们将currentLocation += i;替换为currentLocation++;,它将按预期工作。只是好奇为什么会这样。

3 个答案:

答案 0 :(得分:7)

i = 4 currentLocation = 7 7 + 4 = 11 // MORE than 9 从1开始。

在循环中:

在第一遍中,它将0添加到currentLocation,将其保留为1。

第二遍,它将currentLocation加1使其变为2。

第三遍,它将2加到currentLocation上,使其等于4。

在第四遍,它将currentLocation加3,使其变为7。

在第五遍,它将currentLocation加4,使其变为11。

以此类推。

如您所见,它始终为currentLocation


通过在浏览器和/或IDE中内置的调试器中逐条语句逐步执行代码语句,并随时观察变量的值,可以最好地理解这种情况。

答案 1 :(得分:1)

这是因为{-# LANGUAGE CPP #-} ... #if MIN_VERSION_base(4,9,0) import Data.Functor.Classes #endif 永远不会等于9。

迭代1:

currentLocation

迭代2:

i = 0
currentLocation = 1 
1 + 0 = 1 

迭代2:

i = 1
currentLocation = 1 
1 + 1 = 2 

迭代3:

i = 2
currentLocation = 2 
2 + 2 = 4 

迭代4:

i = 3
currentLocation = 4 
3 + 4 = 7

答案 2 :(得分:0)

逐步完成该过程。

开始时

i = 0, currentLocation = 1

第一次迭代时

i = 1, currenttLocation = 1

进行第二次迭代时

i = 2, currentLocation = 2

第三个

i = 3, currentLocation = 4

第四个

i = 4 currentLocation = 7

在第五个

i = 5 currentLocation = 11

由于currentLocation永远不会精确等于9,因此循环永远不会中断