MIE*_*MIE 5 javascript infinite-loop
这段代码运行无限,为什么?
function f(n){
i=0;
if (n==2){
while(i<2){
f(i);
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果n!= 2,该函数应该什么也不做,如果n等于2,则函数调用f(0)和f(1),因此它应该在此之后停止,但是在运行它时只会得到无限循环.
任何人都可以说出原因?
编辑:函数外没有任何东西.
并且不需要更好的代码.只是问为什么.
您可以通过更改来修复它
i=0;
Run Code Online (Sandbox Code Playgroud)
至
var i=0;
Run Code Online (Sandbox Code Playgroud)
您的i变量是全局的(或者至少它的范围是外部的f,因此它由函数的所有调用共享).当n最初2,你进入循环,这个循环总是复位i到0刚刚增量之前.因此,你拥有的顺序
i = 0 // start of f
// enters loop for the first time with f(0)
i = 0 // start of f
i = 1 // i++
i <2 so loop again
i = 0 // start of f
i = 1 // i++
i <2 so loop again
i = 0 // start of f
i = 1 // i++
i <2 so loop again
i = 0 // start of f
i = 1 // i++
i <2 so loop again
i = 0 // start of f
i = 1 // i++
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |