定时器对象标识符的使用?表示定时器的标识符?
最近,在小程序的开发中,setTimeout和setInterval函数经常被使用,而这两个函数的使用经常被混淆。我在这里专门研究了一下,做个总结,希望同行读了能有所收获,不再迷失。
首先需要注意的是,setTimeout和setInterval是两个实现定时调用的函数,而不是thread之类的线程。一般来说,线程可以在一个时间片内并发执行调用,但是这两个函数并不是这样使用的,因为我们都知道JavaScript是以单线程的方式在浏览器的JavaScript引擎中运行的。
setTimeout和setInterval的作用是在你设置的时间点,把你要执行的代码插入到JavaScript引擎维护的代码队列中。插入代码队列并不意味着您的代码会立即执行。理解这一点很重要。
一.超时
SetTimeout()只执行一次代码。如果您想多次调用它,请使用setInterval()或让代码本身再次调用setTimeout()。
上面的代码执行顺序是:先执行dosomething1的内容,然后运行到setTimeout的地方。setTimeout会告诉浏览器, 500ms 后会有一个要执行的代码插入到你的队列中,浏览器同意了(注意,插入代码并不代表立即执行)。setTimeout代码运行后,dosomething3的代码在它开始执行后立即执行。
问题来了。如果dosomething3的代码执行时间超过500ms,会有什么结果?500ms一到会执行dosomething2代码吗?事实可能会让你有点失望。在dosomething3的执行过程中(500ms后),dosomething2代码被插入到代码队列中,但是dosomething2的代码段直到funcName的方法执行结束才执行。从代码队列中很容易理解dosomething2代码在funcName后面,js在单线程中执行。如果是另一种情况,dosomething3代码的执行时间是500ms,SetTimeout在500ms后将dosomething3代码插入代码队列,而当时执行线程可能已经空闲,那么在500ms后,将dosomething2代码插入队列并立即执行,然后你感觉500 ms后,立即执行。
定时器超时后,记得清零:clearTimeout(timeoutId)这里的timeoutId是setTimeout返回的正整数,是定时器的唯一标识符。
第二,设置间隔
SetInterval可以作为setTimeout的升级版,就像setTimeout在循环中调用自己一样,用法和setTimeout一样。用完的时候记得用clearInterval清空定时器。
这里可能有两个问题3360
1.可以跳过该时间间隔。
2.时间间隔可能小于定期调用的代码的执行时间。
同时,当funcName开始执行时,执行dosomething1代码时,执行setInterval,200ms后,插入dosomething2代码,funcName代码平滑结束,dosomething2代码开始执行。如果dosomething2代码已经执行了比较长的时间,超过了下一个插入时间点400ms,那么在代码队列之后又插入了一个dosomething2代码,继续执行dosomething2,超过了插入时间点600ms,那么问题就来了。起初,我认为dosomething2代码的副本将继续被插入代码队列的后面.但实际情况是,由于代码队列中已经有一个未执行的dosomething2代码,600ms的插入时间会被‘无情’跳过,因为JavaScript引擎只允许一个未执行的dosomething2代码。惊讶不惊讶?
所以有更好的方法来实现这个功能。主要思想是递归:
这里有一个知识点:
arguments的主要用途是保存函数参数,带有被调用方属性,返回正在执行的函数对象,即指定函数对象的文本,有利于匿名函数的递归或者保证函数的封装。
但现在arguments.callee()已被弃用;
因为访问参数是一个非常昂贵的操作,因为它是一个非常大的对象,所以每次递归调用都需要重新创建,这影响了现代浏览器的性能,也影响了闭包。
三。setTimeout和setInterval之间的区别
setInterval执行一次代码后,会在给定的时间间隔后自动重复该代码,而setTimeout只执行该代码一次。
SetInterval和setTimeout都返回clearInterval和clearTimeout调用的计时器对象标识符。
SetTimeout用于延迟方法或函数的执行。
SetInterval一般用来刷新表单,对于一些假实时表单,指定刷新同步的时间。
现在你是不是觉得很简单,很好分辨?那么下面两个例子就很容易分辨出区别了。
示例1:
示例2:
本文来自网络,不代表「专升本要什么条件_专升本要几年_成人高考专升本_山东专升本信息网」立场,转载请注明出处:http://www.sdzsb8.cn/zsxx/20069.html