意外的无限循环

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),因此它应该在此之后停止,但是在运行它时只会得到无限循环.

任何人都可以说出原因?

编辑:函数外没有任何东西.

并且不需要更好的代码.只是问为什么.

Den*_*ret 7

您可以通过更改来修复它

i=0;
Run Code Online (Sandbox Code Playgroud)

var i=0;
Run Code Online (Sandbox Code Playgroud)

您的i变量是全局的(或者至少它的范围是外部的f,因此它由函数的所有调用共享).当n最初2,你进入循环,这个循环总是复位i0刚刚增量之前.因此,你拥有的顺序

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)

  • @MIE当你没有用`var`声明变量时,你重用一个外部变量(如果你从未声明它,则重用全局变量). (2认同)