javascript jquery间隔中的全局变量

javascript jquery间隔中的全局变量,javascript,jquery,intervals,Javascript,Jquery,Intervals,我有这样的代码 var challegneListener; $(document).ready(function(){ var challegneListener = setInterval("challengeListenerBot()",5000); }); function challengeListenerBot(){ clearInterval(challegneListener); } 问题是,间隔并没有停止,因为名为challengeListenerBot的

我有这样的代码

var challegneListener;

$(document).ready(function(){
    var challegneListener = setInterval("challengeListenerBot()",5000);
});

function challengeListenerBot(){
    clearInterval(challegneListener);
}
问题是,间隔并没有停止,因为名为challengeListenerBot的函数没有将challegnestener变量视为间隔数。当文档准备就绪时,我必须使用jQuery启动interval。

更改此选项:

$(document).ready(function(){
    var challegneListener = setInterval("challengeListenerBot()",5000);
});
为此:

$(document).ready(function(){
    challegneListener = setInterval("challengeListenerBot()",5000);
});
问题是,您在DOM就绪时调用的匿名函数中声明了一个新的challengeListener变量。它隐藏全局变量,仅将setInterval ID保存到局部变量,当其封闭函数完成执行时,局部变量将被垃圾收集。

更改此设置:

$(document).ready(function(){
    var challegneListener = setInterval("challengeListenerBot()",5000);
});
为此:

$(document).ready(function(){
    challegneListener = setInterval("challengeListenerBot()",5000);
});

问题是,您在DOM就绪时调用的匿名函数中声明了一个新的challengeListener变量。它隐藏全局变量,仅将setInterval ID保存到局部变量,当其封闭函数完成执行时,局部变量将被垃圾收集。

如果隐藏全局变量,请删除变量:

另外,您的代码使用eval,将其更改为:

challegneListener = setInterval(challengeListenerBot, 5000); 

隐藏全局变量,删除变量:

另外,您的代码使用eval,将其更改为:

challegneListener = setInterval(challengeListenerBot, 5000); 
在该函数中使用var将创建一个新变量,该变量的作用域为该函数,这意味着全局定义的challegneListener变量保持未定义状态,因此不会清除间隔。删除var以修复此代码


在该函数中使用var将创建一个新变量,该变量的作用域为该函数,这意味着全局定义的challegneListener变量保持未定义状态,因此不会清除间隔。删除var以修复此代码。

因为var-challegneelistener是一个局部变量。顺便说一句,如果您希望函数只触发一次,请使用setTimeout。因为var-challegneelistener是一个局部变量。顺便说一句,如果您希望函数只触发一次,请使用setTimeout。@KamilSolarczyk。这段代码仍然使用邪恶的eval,你可以通过删除字符串来修复它,只需给出函数引用,一切都很好。很好,即使是伟大的开发人员也会经常犯这些错误。@KamilSolarczyk是的,gdoron有一个很好的观点,你可以只传递函数名,不带括号,不带引号,不带调用,它也会起同样的作用,并使用JS最佳实践。@KamilSolarczyk。这段代码仍然使用邪恶的eval,你可以通过删除字符串来修复它,只需给出函数引用,一切都很好。很好,即使是优秀的开发人员也会经常犯这些错误。@KamilSolarczyk是的,gdoron有一个很好的观点,你可以只传递函数名,不带括号,不带引号,不带调用,它的工作原理是一样的,并且使用JS最佳实践。