Javascript setInterval()在Firefox和Chrome中的行为不同
我编写了一个函数,希望它在一段时间内每秒钟显示1到10。在调试程序时,我想将结果记录到控制台,并看到firefox和chrome的不同结果,chrome也会在每次页面刷新后更改结果 以下是我的职责:Javascript setInterval()在Firefox和Chrome中的行为不同,javascript,jquery,firefox,browser,setinterval,Javascript,Jquery,Firefox,Browser,Setinterval,我编写了一个函数,希望它在一段时间内每秒钟显示1到10。在调试程序时,我想将结果记录到控制台,并看到firefox和chrome的不同结果,chrome也会在每次页面刷新后更改结果 以下是我的职责: function log10() { for(var i =0;i<=10;i++) { console.log(setInterval(function() { $("span").text(i)
function log10() {
for(var i =0;i<=10;i++)
{
console.log(setInterval(function() {
$("span").text(i)
},6000));
}
}
函数log10(){
对于(var i=0;i您没有保存上下文,使用匿名函数保存上下文。您应该使用setTimeout
而不是setInterval
,因为setInterval
在您停止之前不会停止(使用clearInterval
或卸载页面)。另一方面,setTimeout
将仅为每个循环运行一次,延迟为6000ms
您不需要循环,setInterval将自行“循环”,您只需要有一个条件来告诉它何时停止。您遇到了变量绑定问题。解决这些问题的另一种方法是结合递归和setTimeout传入要显示的数字:
//递归函数
功能日志10(编号){
如果(对setInterval
中的return
进行编号)返回包含动画所需所有信息的JavaScript对象(如this对象、回调函数、长度、帧速率).
.Src:这是一个IIFE、立即调用的函数表达式。为什么FF和Chrome@Mike-console.log()
在FF和Chrome中的行为非常不同。@Mike以前的代码有问题。我根据您的要求对其进行了更改。不,这应该可以解决您的问题。@Jasper:您有到的链接吗IIFE@Mike-由于log10(编号)
。第一次调用它时,必须使用已定义的值调用log10。在链接的JSFIDLE中,您使用“theNumber”调用它,此时未定义“theNumber”……请尝试使用log10(0),如我上面的示例所示==>
function log10() {
var i = 0;
function repeat(){
if(i > 10 ) return;
setTimeout(repeat, 600);
$("span").text(i);
i++;
}
repeat();
}
function log10() {
var counter = 1;
var evt = setInterval(function() {
$("span").text(counter++);
if(counter > 10)
clearInterval(evt);
}, 1000);
}
// recursive function
function log10(theNumber) {
if (theNumber <= 10)
{
setTimeout(function() {
$("span").text(theNumber);
log10(++theNumber);
},1000);
}
}
// kick things off
log10(0);