JavaScript setTimeout循环不';t折断或似乎握住它';谁拥有全局变量的副本?

JavaScript setTimeout循环不';t折断或似乎握住它';谁拥有全局变量的副本?,javascript,Javascript,在过去的5个小时里,我一直在调试、测试并试图找出问题所在,我没有更多的选择 似乎我的setTimeout循环保存了它自己的全局变量副本 以下是一个函数: function playLights(){ if(bombPlanted == true){ console.log("bombPlanted: "+bombPlanted); if(elapsed < repeats){ setTimeout(playLights, 1

在过去的5个小时里,我一直在调试、测试并试图找出问题所在,我没有更多的选择

似乎我的setTimeout循环保存了它自己的全局变量副本

以下是一个函数:

function playLights(){
    if(bombPlanted == true){
        console.log("bombPlanted: "+bombPlanted);

        if(elapsed < repeats){
            setTimeout(playLights, 1000);
        }
        else{
            bombPlanted = false;
        }
    elapsed++;
    }
}
这就是行动开始的地方:

    if(roundInfo.added.round.bomb){
        initVars();
        playLights();
    }
这就是应该将bombPlanted设置为false的地方,也是我假设的-中断setTimeout循环:

    if(roundInfo.round.phase == "freezetime"){
        bombPlanted = false;
        console.log("setting bomb to false");
    }
这是Node.js的输出:

bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
Handling POST request... [This is where new round starts]
setting bomb to false
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
bombPlanted: true
当炸弹工厂完全完成并爆炸时-一切都重置正常,但如果炸弹工厂由于回合结束速度加快而未能爆炸-它将继续滴答作响并启动setTimeout

正如您所看到的:在冻结时间阶段,它会被调用,并且确实会将bombPlanted设置为false,但旧的循环一直在滴答作响

我的循环是否保留它自己的bombPlanted变量副本,并在所有脚本完成之前拒绝更新它

编辑: 我刚意识到这很可能与反应有关

if(roundInfo.added.round.bomb){
   initVars();
   playLights();
}

包装在:

if (req.method == 'POST') {
        console.log("Handling POST request...");
        res.writeHead(200, {'Content-Type': 'text/html'});

        var body = '';
        req.on('data', function (data) {
            body += data
        });
        req.on('end', function () {
[此处]

        res.end( '' );
        });
}

请阅读并提供一个可运行的示例。@FelixKling我认为我做不到,这基本上只是一个脚本,它从反恐全球进攻游戏中获取数据,并根据这些数据执行动作(在我的例子中,调整我灯泡的颜色),这如何阻止你提供MCVE?@melpomene哦,我现在明白了,好的,我现在就编辑。谢谢。嗯。。检查代码中两种情况下变量的范围是否相同。我相信,
freezetime
中的一个正在使用一个不同作用域的变量。请阅读并提供一个可运行的示例。@FelixKling我认为我做不到,这基本上只是一个脚本,它从反恐全球进攻游戏中获取数据,并根据这些数据执行操作(在我的例子中,调整我灯泡的颜色)这是如何阻止你提供MCVE的?@melpomene哦,我现在明白了,好的,现在就进行编辑。谢谢。嗯……在你的代码中,检查变量的范围在两种情况下是否相同。我相信
冻结时间
中的变量正在使用不同范围的变量
if (req.method == 'POST') {
        console.log("Handling POST request...");
        res.writeHead(200, {'Content-Type': 'text/html'});

        var body = '';
        req.on('data', function (data) {
            body += data
        });
        req.on('end', function () {
        res.end( '' );
        });
}