如何停止 setTimeout 循环?

在前端开发中,我们经常使用 setTimeout 函数来实现定时执行某些任务的效果。但有时候我们需要停止这个定时器,比如在循环中执行了一定次数后需要停止。

setTimeout 的基本用法

setTimeout 函数接受两个参数:第一个参数是待执行的函数,第二个参数是延迟时间(单位为毫秒)。

-- -- - ---- --------- --
--------------------- ------

-------- ----------- -
  ------------- ---------
-

使用 clearTimeout 停止定时器

当我们想要停止一个正在执行的 setTimeout 定时器时,可以使用 clearTimeout 函数。该函数接受一个参数,即要停止的定时器 ID。

----- ------- - --------------------- ------

-- - --- ---------
------------- -- -
  ----------------------
-- -----

-------- ----------- -
  ------------- ---------
-

上述代码中,我们定义了一个名为 timerId 的变量来存储定时器的 ID,然后使用 setTimeout 函数创建了一个定时器并将其 ID 赋值给 timerId。接着,我们在 500 毫秒之后调用 clearTimeout 函数来停止这个定时器。

通过递归实现 setInterval 效果

除了使用 setTimeout 函数来实现定时执行某些任务的效果之外,我们还可以使用递归来实现类似 setInterval 的效果。下面是一个例子:

-------- ------ -
  ------------------- ---------
  ---------------- ------
-

-- ----
-------

上述代码中,我们定义了一个名为 loop 的函数,该函数会在控制台输出一条消息,并延迟 1 秒后再次调用自身。通过这种方式,我们就能够实现一个不间断的循环。

停止递归循环

当使用递归来实现循环时,我们同样需要想办法停止这个循环。为了停止递归循环,我们可以使用一个标志位来记录循环是否应该继续执行。下面是一个示例:

--- -------- - ------

-------- ------ -
  -- ---------- -
    -------
  -

  ------------------- ---------
  ---------------- ------
-

-- ----
-------

-- - - --------
------------- -- -
  -------- - -----
-- ------

上述代码中,我们定义了一个名为 stopLoop 的变量来表示循环是否应该停止。在 loop 函数中,我们首先判断 stopLoop 是否为 true,如果是,则返回并停止循环。否则,我们会在控制台输出一条消息,并延迟 1 秒后再次调用 loop 函数。

最后,我们使用 setTimeout 函数在 5 秒钟之后将 stopLoop 的值设为 true,从而停止循环。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/27292