为什么以下逻辑不起作用?
警告:当您单击“运行代码段”时,以下内容将启动无限循环。
var i = 0;
var currentLocation = 1;
while(currentLocation !== 9){
console.log(currentLocation);
currentLocation += i;
i++;
}
进入无限循环。但是,如果我们将currentLocation += i;
替换为currentLocation++;
,它将按预期工作。只是好奇为什么会这样。
答案 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,因此循环永远不会中断