Javascript clearTimeout()未清除计时器 功能倒计时(秒、元素) { var元素=document.getElementById(elem); element.innerHTML=“游戏以“+秒+秒”结束!”; 如果(secs

Javascript clearTimeout()未清除计时器 功能倒计时(秒、元素) { var元素=document.getElementById(elem); element.innerHTML=“游戏以“+秒+秒”结束!”; 如果(secs,javascript,html,css,cleartimeout,Javascript,Html,Css,Cleartimeout,清除超时没有任何意义,因为您处于由要清除的超时调用的回调中,因此实际上没有什么需要清除的。即使您将timer声明为全局变量,也不会处理这个概念性问题 您的问题实际上是在秒数用完后仍然调用setTimeout。因此,在执行此操作之前请退出此函数(或使用else): 功能倒计时(秒、元素) { var元素=document.getElementById(elem); element.innerHTML=“游戏以“+秒+秒”结束!”; 如果(secs清除超时没有任何意义,因为您处于由要清除的超时

清除超时没有任何意义,因为您处于由要清除的超时调用的回调中,因此实际上没有什么需要清除的。即使您将
timer
声明为全局变量,也不会处理这个概念性问题

您的问题实际上是在秒数用完后仍然调用
setTimeout
。因此,在执行此操作之前请退出此函数(或使用
else
):

功能倒计时(秒、元素)
{   
var元素=document.getElementById(elem);
element.innerHTML=“游戏以“+秒+秒”结束!”;

如果(secs清除超时没有任何意义,因为您处于由要清除的超时调用的回调中,因此实际上没有什么需要清除的。即使您将
timer
声明为全局变量,也不会处理这个概念性问题

您的问题实际上是在秒数用完后仍然调用
setTimeout
。因此,在执行此操作之前请退出此函数(或使用
else
):

功能倒计时(秒、元素)
{   
var元素=document.getElementById(elem);
element.innerHTML=“游戏以“+秒+秒”结束!”;

if(secs如果您只需使用
setInterval
并执行以下操作,效率会更高:

功能倒计时(秒、元素){
var区间;
var元素=document.getElementById(elem);
var timer=setInterval(函数(){
秒--;
更新();
如果(秒<1){
清除间隔(计时器);
}
}, 1000);
函数更新(){
如果(秒>0){
element.innerHTML=“游戏以“+秒+秒”结束!”;
}否则{
document.getElementById('gameContent').style.display='none';
}
}
更新();
}
倒计时(5,“状态”);

游戏

如果您只需使用
setInterval
并执行以下操作,效率会更高:

功能倒计时(秒、元素){
var区间;
var元素=document.getElementById(elem);
var timer=setInterval(函数(){
秒--;
更新();
如果(秒<1){
清除间隔(计时器);
}
}, 1000);
函数更新(){
如果(秒>0){
element.innerHTML=“游戏以“+秒+秒”结束!”;
}否则{
document.getElementById('gameContent').style.display='none';
}
}
更新();
}
倒计时(5,“状态”);

游戏

clearTimeout(timer);
timer
每次都为空。您将
timer
声明为函数中的最后一个变量-您希望如何访问它?在
倒计时
方法之外声明
timer
它需要在方法调用之间保持。
clearTimeout(timer)
timer
每次都为空。您将
timer
声明为函数中的最后一个变量-您希望如何访问它?在
倒计时
方法之外声明
timer
。它需要在方法调用之间保持。
function countDown(secs,elem)
{   
    var element = document.getElementById(elem);
    element.innerHTML = "Game ends in " + secs + " seconds!";
    if(secs<1)
    {   
        clearTimeout(timer);
        document.getElementById('gameContent').style.display='none';

    }
    secs--;
    var timer = setTimeout('countDown('+secs+',"'+elem+'")',1000);

}

 <div class="timerCount" id="status"></div>
 <script>countDown(5,"status");</script>
function countDown(secs,elem)
{   
    var element = document.getElementById(elem);
    element.innerHTML = "Game ends in " + secs + " seconds!";
    if(secs<1)
    {   
        document.getElementById('gameContent').style.display='none';
        return; // <-------- add this!
    }
    secs--;
    // avoid passing string as first argument to setTimeout:
    setTimeout(countDown.bind(null, secs, elem),1000);
}