Javascript 为什么我的设置间隔似乎在警报消息后最后运行一次?

Javascript 为什么我的设置间隔似乎在警报消息后最后运行一次?,javascript,Javascript,我正在编写一个简单的n-back游戏,在一个会话结束时,我会弹出一条警告消息,告诉用户如果他们的n-back分数达到75%或更高,他们的n-back级别将提高。但是由于某种原因,在用户单击OK或点击enter之后,setInterval函数似乎又运行了一次。在我创建的网格上,还有一个正方形亮起,即使会话本应结束。我将在下面发布相关的游戏代码: $('#start').click(function() { let counter = 0; message_switch = tr

我正在编写一个简单的n-back游戏,在一个会话结束时,我会弹出一条警告消息,告诉用户如果他们的n-back分数达到75%或更高,他们的n-back级别将提高。但是由于某种原因,在用户单击OK或点击enter之后,
setInterval
函数似乎又运行了一次。在我创建的网格上,还有一个正方形亮起,即使会话本应结束。我将在下面发布相关的游戏代码:

$('#start').click(function()
  {
    let counter = 0;
    message_switch = true;
    $('#start').blur();
    $('#score-output').text(0);
    $('#percentage').text('%');
    var intervalID = setInterval(function()
      {
        counter++;
        show_card(get_cardID(cardIDs));
        if (counter === 30)
          {
            window.clearInterval(intervalID);
            message_switch = false;
            var score = Math.round((playerMatches.length / matches.length) * 100);
            score = score - (error_count * 3);
            update_score(score);
            if (score < 50)
              {
                if (n_back < 2)
                  {
                    n_back = 1;
                  } else {
                    n_back = n_back - 1;
                  }
              } else if (score < 75 && score >= 50)
                {
                  n_back = n_back;
                } else if (score >= 75) {
                  n_back = n_back + 1;
                };
            $('#nback').text(n_back);
            reset_game_values();
            if (score >= 75) //here there is some issue 
              {
                window.alert("Congratulations, you will move up to " + n_back + " back.");
                score = 0;
                return;
              } else {
                score = 0;
              }
          }
      }, 3500);
  })
$(“#开始”)。单击(函数()
{
设计数器=0;
消息_开关=真;
$('#start').blur();
$(“#分数输出”)。文本(0);
$('百分比').text('百分比');
var intervalID=setInterval(函数()
{
计数器++;
出示卡片(获得卡片(卡片));
如果(计数器==30)
{
窗口。clearInterval(intervalID);
消息_开关=错误;
var分数=数学轮((playerMatches.length/matches.length)*100);
分数=分数-(错误计数*3);
更新大学分数(分数);
如果(分数<50)
{
如果(n_back<2)
{
n_back=1;
}否则{
n_back=n_back-1;
}
}否则如果(分数<75&&score>=50)
{
n_back=n_back;
}否则如果(分数>=75){
n_back=n_back+1;
};
$('nback')。文本(n#u back);
重置游戏值();
如果(分数>=75)//这里有一些问题
{
window.alert(“恭喜你,你将升级到”+n_back+“back”);
得分=0;
返回;
}否则{
得分=0;
}
}
}, 3500);
})

我知道这是很多代码,也有很多代码我没有提供,主要是为了尽量简短。有人看到我没有看到的明显的东西吗?如果你觉得你需要看更多的节目,我可以提供。谢谢。

您确定在您的过程中没有再次单击
#开始
吗?我也想知道,但整个游戏过程不会重新开始。一张网格卡最后一次亮起,然后游戏结束,即使游戏已经结束了,因为这个方法是在间隔id被使用之后使用的。在snippet或JSFIDLE中做一个可重复的例子,它似乎没有这个代码的问题,问题可能来自html。我尝试使用codepen,但由于某些原因,它在codepen中根本不起作用。代码是完全一样的,我只是复制和粘贴。这是我无法理解的。如果没有一些代码片段来播放,将很难猜测。所以我给你一些建议:1)定义intervalID和gobal作用域,也就是说,在click事件的监听器之外。2) 在开始新的
setInterval()
调用
clearInterval(invervalID)
之前。