首页 > 两种setInterval的区别

两种setInterval的区别

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p id="number"></p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-beta1/jquery.js"></script>
<script>

</script>
</body>
</html>

如果其中js代码是

$(function(){
    var timer;
    function begin(){
        var num = Math.floor(Math.random()*10);
        $('#number').html(num);
    };
    timer = setInterval(begin, 500);

})

或

$(function(){
    var timer;
    function begin(){
        var num = Math.floor(Math.random()*10);
        $('#number').html(num);
        timer = setInterval(begin, 500);
    }
})

Q1:这两种写法的实质区别是什么?!
Q2:在clearInterval有何不同?!
Q3:会出现回调时,时间不准确,产生的原因是什么?


第二种写法是错误的吧,定时器不断增加,你这样跑肯定会出现卡死的。在函数里面递归应该使用 setTimeout。这样实现的效果和第一种 setInterval 类似


兄弟,你是打算把setInterval当成setTimeout用不?第二种写法是不对的,这样的话浏览器会挂掉,应该改成setTimeout,这种写法比第一种用setInterval的方法好,当然你还缺少了一句话,要先调用下begin函数,否则这个代码不会运行。


Q1 首先第二种的写法 ,在begin 函数内 重复执行 begin,那还不如直接用递归,你得先执行一次begin才能实现timer的赋值,以及定时器的启动。一般写法都是第一种。 你用第二种的话 ,每执行一次 begin都会给timer赋值,而且也会出现作用域的积累问题。 最好是每次进来 begin 先把定时器清除,并把timer=null;
Q3 回调函数也是一个异步的机制,我觉得可能某个条件让他 到任务队列了。才执行吧

【热门文章】
【热门文章】