JavaScript setTimeout

摘要:在本教程中,您将学习如何使用 JavaScript setTimeout() 来设置计时器并在计时器到期后执行回调函数。

JavaScript setTimeout() 简介

setTimeout()window 对象的方法。setTimeout() 设置计时器并在计时器到期后执行 回调函数

以下说明了 setTimeout() 的语法:

let timeoutID  = setTimeout(cb [,delay], arg1, arg2,...);
Code language: JavaScript (javascript)

在此语法中:

  •  cb 是计时器到期后要执行的 回调函数
  • delay 是计时器在执行回调函数之前应等待的时间(以毫秒为单位)。如果省略它,则 delay 默认值为 0。
  • arg1arg2 等是传递给 cb 回调函数的参数。

setTimeout() 返回一个 timeoutID,它是一个正整数,标识通过调用该方法创建的计时器。

timeoutID 可用于通过将其传递给 clearTimeout() 方法来取消超时。

JavaScript setTimeout() 示例

以下创建了两个简单的按钮,并将它们连接到 setTimeout()clearTimeout()

当您单击“显示”按钮时,将调用 showAlert(),并在 3 秒后显示一个警报对话框。要取消超时,请单击“取消”按钮。

HTML

<p>JavaScript setTimeout Demo</p>
<button onclick="showAlert();">Show</button>
<button onclick="cancelAlert();">Cancel</button>
Code language: HTML, XML (xml)

JavaScript

var timeoutID;

function showAlert() {
    timeoutID = setTimeout(alert, 3000, 'setTimeout Demo!');
}

function clearAlert() {
    clearTimeout(timeoutID);
}
Code language: JavaScript (javascript)

输出

JavaScript setTimeout 演示

JavaScript setTimeout() 的工作原理

JavaScript 是单线程的,因此它一次只能执行一项任务。这意味着它在给定时间只能执行一项任务。除了 JavaScript 引擎之外,Web 浏览器还具有其他组件,例如 事件循环调用堆栈 和 Web API。

当您调用 setTimeout() 时,JavaScript 引擎会创建一个新的函数 执行上下文 并将其放置在 调用堆栈 中。

setTimeout() 执行并在 Web 浏览器的 Web API 组件中创建计时器。当计时器到期时,在 setTimeout() 中传递的回调函数将被放置到回调队列中。

事件循环 同时监控调用堆栈和回调队列。当调用堆栈为空时,它会从回调队列中移除回调函数并将其放置到调用堆栈中。

回调函数一旦进入调用堆栈,就会被执行。

请参见以下示例

function task() {
    console.log('setTimeout Demo!')
}

setTimeout(task, 3000);
Code language: JavaScript (javascript)

在此示例中:

首先,setTimeout() 被放置在调用堆栈中。它在 Web API 中创建计时器。

javascript setTimeout step 1

其次,大约 3 秒后,计时器到期,task 被推入回调队列,并等待下一次执行机会。

javascript setTimeout step 2

第三,由于调用堆栈为空,事件循环会将 task() 从回调队列中移除,将其放置到调用堆栈中并执行它。

javascript setTimeout step 3

第四,setTimeout() 中的 console.log() 执行,创建一个新的函数执行上下文。

javascript setTimeout step 4

最后,console.log()task() 一旦完成,就会从调用堆栈中弹出。

摘要

  • setTimeout() 是 window 对象的方法。
  • setTimeout() 设置计时器,并在计时器到期时执行回调函数。
本教程是否有帮助?