这次给大家带来javascript的定时器详解,使用javascript的定时器注意事项有哪些,下面就是实战案例,一起来看一下。
除了放置异步任务的事件,任务队列还可以放置定时事件,即指定某些代码在多少时间之后执行。这叫做定时器(timer)功能,也就是定时执行的代码。
定时器功能主要由settimeout()和setinterval()这两个函数来完成,它们的内部运行机制完全一样,区别在于前者指定的代码是一次性执行,后者则为反复执行。以下主要讨论settimeout()。
settimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。
console.log(1);settimeout(function(){console.log(2);},1000);console.log(3);
上面代码的执行结果是1,3,2,因为settimeout()将第二行推迟到1000毫秒之后执行。
如果将settimeout()的第二个参数设为0,就表示当前代码执行完(执行栈清空)以后,立即执行(0毫秒间隔)指定的回调函数。
settimeout(function(){console.log(1);}, 0);console.log(2);
上面代码的执行结果总是2,1,因为只有在执行完第二行以后,系统才会去执行任务队列中的回调函数。
总之,settimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在任务队列的尾部添加一个事件,因此要等到同步任务和任务队列现有的事件都处理完,才会得到执行。
html5标准规定了settimeout()的第二个参数的最小值(最短间隔),不得低于4毫秒,如果低于这个值,就会自动增加。在此之前,老版本的浏览器都将最短间隔设为10毫秒。另外,对于那些dom的变动(尤其是涉及页面重新渲染的部分),通常不会立即执行,而是每16毫秒执行一次。这时使用requestanimationframe()的效果要好于settimeout()。
需要注意的是,settimeout()只是将事件插入了任务队列,必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在settimeout()指定的时间执行。
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
javascript运行机制之event loop
javascript运行机制之事件和回调函数
javascript运行机制之任务队列
以上就是javascript的定时器详解的详细内容。