Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setInterval()在Firefox和Chrome中的行为不同_Javascript_Jquery_Firefox_Browser_Setinterval - Fatal编程技术网

Javascript setInterval()在Firefox和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)

我编写了一个函数,希望它在一段时间内每秒钟显示1到10。在调试程序时,我想将结果记录到控制台,并看到firefox和chrome的不同结果,chrome也会在每次页面刷新后更改结果

以下是我的职责:

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);