循环的Javascript冻结浏览器,没有语法错误

Javascript for-loop freezes the browser, without syntax error

本文关键字:语法 错误 浏览器 Javascript 冻结 循环      更新时间:2023-09-26

我在javascript中的一行代码有问题。我做了一件事:

function evvalt(valtoztat){
    for(i=0;i<12;i++) naptar(valtoztat);
}

如果我这样做,浏览器就会冻结。naptar(函数)没有问题,它运行得很好。这个问题有趣的一面下一个:

function evvalt(valtoztat){
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
    naptar(valtoztat);
}

此代码没有问题..:O我想知道问题出在哪里。

感谢您的协助,David

由于您尚未将变量i声明为局部变量,因此它被视为全局变量,并且很可能naptar()函数中的某些内容也在更改i的值,从而导致无限循环。

i的前面添加var,使其成为局部变量:

function evvalt(valtoztat){
    for(var i=0;i<12;i++) naptar(valtoztat);
}

此外,还可以在naptar()中查找使用i的位置,而不将其声明为局部变量(或在naptar()调用的任何函数中)。您应该始终在函数中使用var声明局部变量,这样它们就不会成为隐式全局变量。

更好的是,在Javascript中开始使用严格模式,在这种模式下,创建这样的意外全局将成为一个错误,而不是一个无声的错误。

您正在计算全局空间,因此有可能在其他地方更改"i"。

宁愿做:

for (var i = 0, i < .. , i++) {..

如果你在其他地方以同样的方式执行for循环,难怪它不起作用。