zoukankan      html  css  js  c++  java
  • Javascript中的setTimeout和setInterval函数区别

    从几年前(有5年多)一直到现在,在很多讲解Javascript的资料中看过setTimeout和setInterval这两个函数,一直就是以为它们俩的功能是完全一样的--就是多久时间后执行一下了事,所以一直用的就是setTimeout函数,还从来在自己的代码中没用过setInterval函数,其实为什么就不再进一步想想,如果这两个函数功能完全一样,为啥有存在的合理性。
    到现在我才对两个函数的一致性表现出惯于怀疑来,到网上Google一下,才恍然大悟。原来是有区别的,首先从其中的两个单词来理解也可以看出一点名堂来:
    Timeout:<主美>(球类比赛中的)暂时休息,(工作时的)工间休息;计算机里多为"超时",或者"时间到了"的意思
    Interval:间隔, 距离, 幕间休息,时间间隔
    由他们各自代表的 setTimeout 函数表时指定的时间到了,执行某个指定的函数,这时候它的使命即告完成,只执行一次。setInterval 函数则是每隔指定的时间就会执行指定的函数,如果不清除,将执行无数次。setInterval函数的行为更像是很多编程语言中的Timer控件的行为。
    清除计数器的函数分别是 clearTimeout 和 clearInterval, 功能说明如下
    var timer1 = setTimeout("foo",1000);  //设定foo函数将在1000毫秒后执行一次
    .........//do something
    clearTimeout(timer1); //如果程序执行到这里,以setTimeout开始计数时1000毫秒未到,
                                    //clearTimeout后,foo将得不到执行
                                    //如果1000毫秒已过,foo已被触发执行,就没什么意义了
    vartimer2 = setInterval("foo",1000); //设定从现在计时起,每1000毫秒执行1次foo
    .........//do something
    clearInterval(timer2);  //以后foo将不再触发执行了
    所以这样一个细节的被忽略了,也就长久以来用setTimeout+递归来模拟了setInterval的行为,如下代码
    function foo(){
        .......//do something
        setTimeout("foo",1000);
    }
    上面代码是不是看起来与setInterval的表现一样的啊,仅仅是三行倒也好理解,似乎也没复杂多少,但是现成的简单一点的东西为什么不直接拿来用呢?
  • 相关阅读:
    剑指Offer-11.二进制中1的个数(C++/Java)
    剑指Offer-10.矩形覆盖(C++/Java)
    剑指Offer-9.变态跳台阶(C++/Java)
    UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
    UVA1607 Gates 与非门电路 (二分)
    UVA 1451 Average平均值 (数形结合,斜率优化)
    UVA 1471 Defense Lines 防线 (LIS变形)
    UVA 1606 Amphiphilic Carbon Molecules 两亲性分子 (极角排序或叉积,扫描法)
    UVA 11134 FabledRooks 传说中的车 (问题分解)
    UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
  • 原文地址:https://www.cnblogs.com/daohuen/p/2662755.html
Copyright © 2011-2022 走看看