setTimeout 操作顺序 clearTimeout

setTimeout

  • 等待指定的毫秒数后执行一个函数。
  • 用于延迟函数的执行。

语法: setTimeout(function, milliseconds)window.setTimeout(function, milliseconds)

示例: 此示例在 1 秒后向控制台输出 hello。第二个参数以毫秒为单位,因此 1000 = 1 秒,250 = 0.25 秒等。

setTimeout(function() {
    console.log('hello');
}, 1000);

setTimeout 的问题

如果你在 for 循环中使用 setTimeout 方法

for (i = 0; i < 3; ++i) {
  setTimeout(function(){
    console.log(i);
  }, 500);
}

这将输出值 3 three 次,这是不正确的。

解决此问题的方法:

for (i = 0; i < 3; ++i) {
  setTimeout(function(j){
    console.log(i);
  }(i), 1000);
}

它将输出值 012。在这里,我们将 i 作为参数传递给函数(j)。

操作顺序

此外,由于 Javascript 是单线程并使用全局事件循环这一事实,setTimeout 可用于通过调用 setTimeout 以零延迟将项添加到执行队列的末尾。例如:

setTimeout(function() {
    console.log('world');
}, 0);

console.log('hello');

实际输出:

hello
world

此外,此处零毫秒并不意味着 setTimeout 内的函数将立即执行。根据执行队列中剩余的要执行的项目,需要稍微多一点。这个只是推到队列的末尾。

取消超时

clearTimeout() 停止执行 setTimeout() 中指定的函数

语法: clearTimeout(timeoutVariable) 或 window.clearTimeout(timeoutVariable)

示例:

var timeout = setTimeout(function() {
    console.log('hello');
}, 1000);

clearTimeout(timeout); // The timeout will no longer be executed