美文网首页
JavaScript基础 定时器

JavaScript基础 定时器

作者: 0说 | 来源:发表于2018-02-05 01:00 被阅读0次

    setTimeout() 定时只执行一次

    用法:
    setTimeout( x , 1000 ); ===> 1000ms后执行x函数
    x不能加();加括号后会立即执行 ,执行后返回值是undefined,执行顺序是先读()里的

    setTimeout( x , 1000 );
    function x(){
      alert( 1 );
    }
    这里可以看成
    var x = xxx;
    setTimeout( x , 1000 ); ===>先执行x;
    

    另一种写法

    setTimeout( ' x() ' , 2000 ) 
    会当成js字符串代码来读 
    字符串里可以写一段执行的代码( setTimeout、setInterval、eval() 这三种方法可以用这样写法)
    

    例、

    setTimeout( 'alert( 8888 );alert( 9999 )' , 2000 );
    

    注意:用字符串这种方法时调用的x()是全局函数才可以

    !function (){
        setTimeout( 'a()',1000 );
        function a(){
            alert( 5 ); ===>报错:"a()"要是全局的
      }
    }();
    

    setTimeout()调用函数且传参几种写法

    一、
    setTimeout( x , 2000 , 10 , 10 );
    function x( a , b ){
        alert( a+b ); ===>弹出20
    }
    
    二、
    setTimeout( bind( null , 10 , 10 ),2000 );
    
    三、
    setTimeout( function(){
        x( 10,10 );
    },2000)
    

    setInterval() 循环执行

    括号里写法跟setTimeout一样

    setInterval( x , 2000 );
    function x(){
        alert( 1 );  ===>循环每2秒执行一次;
    }
    

    注意:时间是没办法到0的,最短最低是浏览器的频率,浏览器刷新频率 13~20

    setTimeout( function (){
        alert( 2 );
    },0 )                先弹1再弹2     setTimeout延迟执行
    alert( 1 ) ;  ===>立即执行
    

    清除定时器

    clearTimeout();只执行一次时为什么还要清呢?因为一个网站如果测到你是vip就不用弹vip的广告;
    clearInterval();

    var t = setTimeout( function(){
          alert( 5 );
    } , 5000 );
    document.onclick = function (){
        clearTimeout( t );
    }
    

    setInterval 特殊调用

    setInterval( fn() , 1000 ) //fn()马上会执行,下面函数返回的是fn 执行完函数后变成 setInterval( fn , 1000 )
    这里可以看 var  a = fn() ===自执行后是fn    所以a=fn    setInterval( a , 1000 )
    function fn(){
        num ++;
        console.log( num );
        return fn;
    }
    

    setTimeout代替setInterval

    每隔13ms执行一次函数
    假设要执行函数里的代码内容很多,多到下一次函数执之后还没完;
    当用setInterval()时 只要时间一到就立马再调用里面的代码,不用等到所有代码执行完再调用;

    setTimeout( function fn(){
          alert( 1 );   
          setTimeout( fn , 1000); // 上面执行到这里马上会调用自己,再从重新执行一次;
    },1000)
    

    这个方法比setInterval好,它可以保证前面的代码执行完再调用;(再做动画的时候会用到;)

    同步与异步

    7点时在搬砖
    8点时在搬砖
    9点时在搬砖
    9点老板过来说:晚上7点一起去吃饭
    继续搬
    .....
    

    这时在搬砖的事就是同步的,晚上7点一起去吃饭属于异步,要等搬砖的事全部做完再去

    
    setTimeout(function (  ) {
                alert( 1 )
            })
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
            console.log( 'a' );
    

    先打印a再弹窗 定时器是异步 要等同步做完才会做;
    异步操作有:带src ajax 定时器

    相关文章

      网友评论

          本文标题:JavaScript基础 定时器

          本文链接:https://www.haomeiwen.com/subject/tlovzxtx.html