资讯专栏INFORMATION COLUMN

setTimeout() 和 setInterval()

rickchen / 2263人阅读

摘要:调用之后,该方法会返回一直数值,表示超时调用。这个超时调用是计划执行代码的唯一标识符,可以通过它来取消超时调用。一般认为,使用超时调用来模拟间歇调用的是一种最佳模式。

JavaScript是单线程语言,但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行。前者是在指定的时间过后执行代码,而后者是每隔指定的时间就执行一次代码。

setTimeout 超时调用

超时调用需要使用window对象的setTimeout()方法,它接受两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前需要等待多少秒)。第一个参数可以是一个包含JavaScript代码的字符串,也可以是一个函数,但是由于传递字符串可能导致性能损失,因此不建议以字符串作为第一个参数。
下面是重点哦!!!!
第二个参数是一个表示等待多长时间的毫秒数,但经过该时间后指定的代码不一定会执行。JavaScript是一个单线程的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,就有一个JavaScript任务队列。这些任务会按照将它们添加到队列的顺序执行。setTimeout()的第二个参数告诉JavaScript再过多长时间把当前任务添加到队列中如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了后再执行。
调用setTimeout()之后,该方法会返回一直数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用clearTimeout()方法并将相应的超市调用ID作为参数传递给它。如:

// 设置超时调用
var timeoutId = setTimeout(function(){
    alert("Hello World!");
},100);
// 取消超时调用
clearTimeout(timeoutId);

只要在指定的时间尚未过去之前调用clearTimeout(),就可以完全取消超时调用。前面的代码在设置超时调用后马上又调用了clearTimeout(),结果就跟什么也没有发生一样。
注:超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,严格模式下是undefined。

setInterval 间歇调用

间歇调用与超时调用类似,只不过它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或者页面被卸载。

小结

在使用超时调用时,没有必要跟踪超时调用ID,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。一般认为,使用超时调用来模拟间歇调用的是一种最佳模式。在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束前启动。
使用超时调用则可以完全避免这一点。如下:

var num = 0;
var max = 10;

function incrementNumber () {
    num++;
    if (num < max) {
        setTimeout(incrementNumber,500);
    } else {
        alert("Done");
    }
}

setTimeout(incrementNumber,500);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80641.html

相关文章

  • process.nextTick() 、setTimeout()、setInterval() 运行机

    摘要:注意如果主逻辑的代码执行时间已经超过了第二个参数设置的时间,那么等运行到该回调函数时,它会忽略掉这个时间,并立即执行。如果某一个进行大量的计算,那么它就会阻塞在当前的回调函数中,等待该计算完成后,再执行下一个的回调函数。 setTimeout() ​ JavaScript是一个单线程的语言,也就是说它同一时间只能执行一段代码,接下来我们通过两个例子说明一下单线程语言和多线程语言的...

    lscho 评论0 收藏0
  • setTimeoutsetInterval的使用

    摘要:不过两者各有各的应用场景。方法实际上,和的语法相同。这意味着如果函数的主体部分需要秒钟执行完,那么整个函数则要每秒钟才执行一次。不过还是有办法可以终止和函数的执行。 var intervalProcess = setInterval(alert(GOAL!), 3000); 这个变量命名可以在实际代码中采用 这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过...

    noONE 评论0 收藏0
  • JS忍者秘籍中的定时器机制详解

    摘要:设置和清除定时器直接引用忍者秘籍中的图片注意定时器的时间间隔设为,也会有几毫秒的延迟。以上参考资料忍者秘籍第章驯服线程和定时器 showImg(https://segmentfault.com/img/remote/1460000015353524?w=1024&h=681); 前言 前段时间刚看完《JS忍者秘籍》,虽说是15年出版的,有些东西是过时了,但像对原型链、闭包、正则、定时器...

    keelii 评论0 收藏0
  • 定时器

    摘要:提供定时执行代码的功能,叫做定时器,主要由和这两个函数来完成。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。上面代码中,回调函数不会再执行了,因为两个定时器都被取消了。 JavaScript 提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成。它们向任务队列添加定时任务。 setTimeout()...

    Nino 评论0 收藏0
  • setTimeoutsetInterval

    摘要:一个页面在浏览器显示出来至少需要个线程,分别是引擎,渲染,事件触发。其中事件触发是独立于其他个执行的,而和是相互排斥的,也就是说同一个时间二者只有一个在工作。 作为DOM本身十分重要的2个异步执行函数,初学者感觉这个很不好理解,我简单写一写我的理解 setTimeout (func, millisec); setInterval(func, millisec); 这两个方法在形式看起来...

    SnaiLiu 评论0 收藏0
  • js计数器方法setInterval()、clearInterval()、setTimeout()

    摘要:方法描述周期性地调用一个函数或者执行一段代码。方法可取消由方法设置的。语法详解是该延时操作的数字此随后可以用来作为方法的参数。需要注意的是,不支持第一种语法中向延迟函数传递额外参数的功能。该值标识要取消的延迟执行代码块。 方法 描述 setInterval 周期性地调用一个函数(function)或者执行一段代码。 clearInterval 取消掉用setI...

    keithxiaoy 评论0 收藏0

发表评论

0条评论

rickchen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<