【学习笔记】深入理解超时调用(setTimeout)和间歇调用(setInterval)
来源:互联网 发布:中企动力源码 编辑:程序博客网 时间:2024/06/05 06:30
超时调用(setTimeout):在指定的毫秒数后调用函数或计算表达式。
setTimeout(func, 1000); // func执行的函数,1000毫秒
间歇调用(setInterval):按照指定的周期(以毫秒计)来调用函数或计算表达式
setInterval(func, 1000);
用法很简单,但是不一定好用
首先回到JavaScript本身
JavaScript是一个单线程语言,它有一个任务队列,队列里的任务按顺序执行。
打个比方,我们点击一个按钮触发一个事件,此时该事件会被添加到任务队列里边,如果当前队列是空的,那么立即执行该事件;如果不是空的,那么等前面的任务执行完了以后再执行该事件。也就是说,JS里边的代码都不是立即执行的。
其实,超时调用并不是在特定的时间之后执行代码,而是在特定的时间之后将代码添加到任务队列。间歇调用也一样,每间隔特定时间就将代码添加到任务队列。
举个例子:
btn.onclick = function () { setTimeout(延时代码, 200); // 处理代码 }
点击之后过200毫秒,延时代码进入任务队列,在这之前处理代码已经进入任务队列。
假设原任务队列是空的,且处理代码的执行事件是300毫秒,那么延时代码在点击之后过300毫秒才会执行。
间歇调用也是这个道理。因此,如果每一次的代码执行事件过长,就会出现间隔事件小于我们设置的时间的情况。平时我们没遇到这种情况,是因为代码执行时间没那么长,或者出现了这种情况,但是肉眼看不出来。
这里有一个避免setInterval()出问题的方法,那就是链式地调用setTimeout():
var interval = 200;setTimeout(function () { // 处理代码 setTimeout(arguments.callee, interval);}, interval)
这样每一个函数执行时,都会创建新的定时器。arguments.callee是对当前执行函数的引用。这种情况下,前一次处理代码执行完之后,过特定时间,下一次的处理代码才会进入任务队列。
欢迎补充或指正
阅读全文
0 0
- 【学习笔记】深入理解超时调用(setTimeout)和间歇调用(setInterval)
- setTimeout()间歇调用和 setInterval()超时调用
- 超时调用setTimeout 和 间歇调用setInterval
- 超时调用(setTimeout)和间歇调用(setInterval)
- Javascript学习笔记之超时调用和间歇调用
- JavaScript学习-间歇调用和超时调用
- 【JavaScript学习】超时调用和间歇调用
- 超时调用和间歇调用
- 间歇调用和超时调用
- 超时调用和间歇调用
- setTimeout实现间歇调用
- JavaScript间歇调用和超时调用
- javascript超时调用和间歇调用
- setTimeout和setInterval的深入理解
- setTimeout()和setInterval() 何时被调用执行
- setTimeout()和setInterval() 何时被调用执行
- setTimeout()和setInterval() 何时被调用执行
- setTimeout()和setInterval() 何时被调用执行
- AngularJS自定义指令controller和link传参
- 容斥原理
- C#与MySQL直接连接
- 素数筛法
- 【剑指offer】面试题 53:数字在排序数组中出现的次数
- 【学习笔记】深入理解超时调用(setTimeout)和间歇调用(setInterval)
- Restful在Eclipse调试环境中的坑SpringMVC 和 Jersey
- 多线程
- 【安卓学习笔记】JAVA基础Lesson5-关键字this
- ArcEngine GP工具——Summary Statistics(汇总统计)功能的实现
- 虚拟机 --- 环境 linux Centos mysql
- 快速排序
- u-boot学习笔记-1、目录结构
- 【数据结构和算法】Day 5