javascript循环进入精神状态

javascript loop going mental

本文关键字:状态 循环 javascript      更新时间:2023-09-26

我的php页面上有一个简单的javascript循环,它每秒只给一个值加1。循环每秒钟运行一次,并递增值。

var test = 0;
function go() {
  test = test + 1;
  setTimeout(go, 1000);
  }
go();

这很好用。

问题是,它运行的PHP页面实际上位于每10秒刷新一次的div标记内。10秒后,计数失控,每秒加2,然后是3,然后是4,等等。

我该怎么阻止?

考虑到问题似乎是函数运行的多个实例,每次刷新/更新页面时都会增加,我建议为函数添加一个健全性检查:

var test = 0;
var running = running || false;
function go() {
    if (running) {
        // if an instance of go() is already running, the function quits
        return false;
    }
    else {
        running = true; // as the test variable survives I assume this will, too
        test = test + 1;
        setTimeout(go, 1000);
    }
  }
go();

由于test很可能在每次页面更新时都会被覆盖,我建议确保分配不会覆盖预先存在的计数:

var test = test || 0;
var running = running || false;
function go() {
    if (running) {
        // if an instance of go() is already running, the function quits
        return false;
    }
    else {
        var running = true; // as the test variable survives I assume this will, too
        test = test + 1;
        setTimeout(go, 1000);
    }
  }
go();

请记住,您可以简单地使用test变量的存在来确定函数当前是否正在运行,但因为我不知道您是否会将其用于其他目的,所以我选择为该目的创建另一个变量(应包含truefalse布尔值)。

更改:go()if(!test){ go() }

您还必须修复test变量。因此var test = test || 0;