javascript jquery间隔中的全局变量

时间:2012-03-31 20:21:15

标签: javascript jquery intervals

我有这样的代码

var challegneListener;

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

function challengeListenerBot(){
    clearInterval(challegneListener);
}

问题是间隔没有停止,因为名为challengeListenerBot的函数没有看到challegneListener变量作为间隔数。我必须使用jQuery在文档准备就绪时启动间隔。

3 个答案:

答案 0 :(得分:4)

改变这个:

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

对此:

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

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

答案 1 :(得分:1)

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

在此函数中使用var会创建一个范围为此函数的新变量,这意味着全局定义的challegneListener变量仍未定义,因此间隔未被清除。删除var以修复此代码。

答案 2 :(得分:0)

隐藏全局变量,删除var

$(document).ready(function(){
    challegneListener = setInterval("challengeListenerBot()",5000); 
    // removed the var keyword, because it hides the global var.
});

另一件事,您的代码使用eval,将其更改为:

challegneListener = setInterval(challengeListenerBot, 5000);