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最佳实践。