Skip to content

Commit 14e3c23

Browse files
committed
update : 补充单次定时器与循环定时器的区别差异。
1 parent 3533e24 commit 14e3c23

File tree

1 file changed

+6
-2
lines changed
  • Chapter8 - The Browser Object Model

1 file changed

+6
-2
lines changed

Chapter8 - The Browser Object Model/BOM.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ try {
209209

210210
`setTimeout` 是单次定时器,`setInterval` 则是循环定时器。
211211

212-
每次调用定时器函数都会返回一个定时器的 ID,类型为数值型,我们可以将这个 ID 传入到对应的 `clearTimeout``clearInterval` 方法中进行定时器的清楚
212+
每次调用定时器函数都会返回一个定时器的 ID,类型为数值型,我们可以将这个 ID 传入到对应的 `clearTimeout``clearInterval` 方法中进行定时器的清除
213213

214214
每次清除定时器后,最好也将定时器的 ID 置为 null,以方便全局环境中垃圾的回收机制进行回收处理:
215215

@@ -220,10 +220,14 @@ clearTimeout(timer);
220220
timer = null;
221221
```
222222

223-
对于循环定时器的调用而言可能会出现下一次的调用会发生在前一次调用结束之前调用因此我们建议使用单次定时器来模拟循环定时器。
223+
对于循环定时器的调用而言可能会出现下一次的调用会发生在前一次调用结束之前调用`setInterval` 只会在指定的间隔时间中重复调用,但不会判断上次调用是否完成),因此我们建议使用单次定时器来模拟循环定时器(在 `setTimeout` 内再调用 `setTimeout` 这样便可以保证上一次定时执行已经完成)
224224

225225
最后由于定时器是异步代码,JS 是单线程会首先执行同步代码,然后将异步代码放在一个异步队列中排队轮询执行,所以如果当前的定时器之前还有其它的异步程序在执行,那么便无法准确的在规定的时间间隔中被调用,但总的来说执行时间大于等于间隔时间,这是可以确定的。
226226

227+
虽然我们可以设置定时器的间隔时间为 `0`,但通常浏览器默认的最小间隔时 `4ms`
228+
229+
> 我们不能在 `setTimeout` 进行定时操作,因为它的调用时间是自身的间隔时间加上其内部定时任务执行完成所需的时间。
230+
227231
### 系统对话框
228232

229233
- alert : 警告框

0 commit comments

Comments
 (0)