在前端开发中,我们经常使用 setTimeout
函数来实现定时执行某些任务的效果。但有时候我们需要停止这个定时器,比如在循环中执行了一定次数后需要停止。
setTimeout 的基本用法
setTimeout
函数接受两个参数:第一个参数是待执行的函数,第二个参数是延迟时间(单位为毫秒)。
// 延迟 1 秒后执行 showAlert 函数 setTimeout(showAlert, 1000); function showAlert() { alert('Hello, world!'); }
使用 clearTimeout 停止定时器
当我们想要停止一个正在执行的 setTimeout
定时器时,可以使用 clearTimeout
函数。该函数接受一个参数,即要停止的定时器 ID。
-- -------------------- ---- ------- ----- ------- - --------------------- ------ -- - --- --------- ------------- -- - ---------------------- -- ----- -------- ----------- - ------------- --------- -
上述代码中,我们定义了一个名为 timerId
的变量来存储定时器的 ID,然后使用 setTimeout
函数创建了一个定时器并将其 ID 赋值给 timerId
。接着,我们在 500 毫秒之后调用 clearTimeout
函数来停止这个定时器。
通过递归实现 setInterval 效果
除了使用 setTimeout
函数来实现定时执行某些任务的效果之外,我们还可以使用递归来实现类似 setInterval
的效果。下面是一个例子:
function loop() { console.log('Hello, world!'); setTimeout(loop, 1000); } // 开始循环 loop();
上述代码中,我们定义了一个名为 loop
的函数,该函数会在控制台输出一条消息,并延迟 1 秒后再次调用自身。通过这种方式,我们就能够实现一个不间断的循环。
停止递归循环
当使用递归来实现循环时,我们同样需要想办法停止这个循环。为了停止递归循环,我们可以使用一个标志位来记录循环是否应该继续执行。下面是一个示例:
-- -------------------- ---- ------- --- -------- - ------ -------- ------ - -- ---------- - ------- - ------------------- --------- ---------------- ------ - -- ---- ------- -- - - -------- ------------- -- - -------- - ----- -- ------
上述代码中,我们定义了一个名为 stopLoop
的变量来表示循环是否应该停止。在 loop
函数中,我们首先判断 stopLoop
是否为 true
,如果是,则返回并停止循环。否则,我们会在控制台输出一条消息,并延迟 1 秒后再次调用 loop
函数。
最后,我们使用 setTimeout
函数在 5 秒钟之后将 stopLoop
的值设为 true
,从而停止循环。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/27292