您现在的位置是:群英 > 开发技术 > web开发
JavaScript的两种定时器是什么,如何应用的
Admin发表于 2022-09-06 17:49:28797 次浏览
这篇文章主要介绍了title,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望大家通过这篇文章可以有所收获。

JavaScript 中有两种定时器:

  • setTimeout():指定时间后执行一段代码(延迟执行)。

  • setInterval():每隔一段时间执行一段代码(间隔执行)。

JavaScript提供定时器(timer)的功能,可以延期执行或重复执行函数或代码段。

方法 说明
setTimeout() 在指定的毫秒数后调用函数或执行一段代码
setInterval() 按照指定的周期(以毫秒计)来调用函数或执行一段代码
clearTimeout() 取消由setTimeout()方法设置的定时器
clearInterval() 取消由setInterval()设置的定时器

下面单独对两种计时器进行讲解。

setTimeout()

创建定时器

setTimeout(() => console.log("我在两秒后被输出!"), 2*1000); // 1000 = 1s
// 执行上述代码,两秒后会在控制台输出:我在两秒后被输出!

setTimeout() 中共有 4 个参数,这里只使用两个参数,第一个参数是一个箭头函数,第二个参数表示在多少秒后执行这个箭头函数。这个过程称为回调,这个箭头函数称为回调函数。

回调函数

将一个函数作为一个参数传入另一个函数,另一个函数执行完成后再执行传入的函数。上述代码中,箭头函数被当作参数传入 setTimeout() ,setTimeout() 两秒后执行完毕, 于是开始执行箭头函数,所以我们看到的结果会延迟两秒才输出。

箭头函数

箭头函数与普通函数的含义是相同的,只是表示方式不同。因为箭头函数非常简洁,所以常被嵌入其他函数。如果想深入了解请参考其他资料,这里不再赘述。

取消定时器

在创建这个定时器时会返回这个定时器任务的唯一标识符:

let t = setTimeout(() => console.log("我在两秒后被输出!"), 2*1000); // 1000 = 1s
// t 即是一个标识符,但它不是我们认为的那种标识符,你可以打印出来试试!

clearTimeout() 用于取消一个定时任务,前提是这个定时任务还没被触发:

clearTimeout(t);    // 传入定时任务的标识符
console.log("任务取消,两秒后我不会有任何输出!")

setInterval()

创建定时器

参数的用法与 setTimeout() 一致,区别在于,这个定时器它会一直循环执行,运行下面的代码查看效果:

let t = setInterval(() => console.log("每隔一秒我会被输出一次!"), 1000)

取消定时器

clearInterval() 用于取消循环定时任务,运行以下代码查看效果:

let t = setInterval(() => console.log("每隔一秒我会被输出一次!"), 1000);
// 用上面学到的 setTimeout() 来取消循环定时任务
setTimeout(() => {
    clearInterval(t); 
    console.log("我在五秒时被取消!");
;}, 5*1000);

深入理解定时器

在深入理解定时器前,我们需要了解一下 JavaScript 的单线程。因为 JavaScript 是单线程的,所以每次只能执行一段代码。JavaScript 中的任务执行有一个队列的概念,即任务会被排进队列按先入先出的顺序执行。

setTimeout() 定时器演示:

let i = 0;
console.log(i);
setTimeout(() => console.log("我在两秒后被输出!"), 2*1000);
console.log("Hello world!");

用动画来演示一下下面代码的执行过程:

程序中的代码会被逐个添加到队列中,当执行到 setTimeout() 时,不会立即被添加到队列中,定时器会被延迟两秒。在定时器延迟的过程中,程序不会等待,而是直接执行下一段代码,所以 “Hello world!” 会提前被输出。两秒之后,定时器任务会被添加到队列中,并输出 “我在两秒后被输出!” 这句话。

希望动画能让大家理解!这里队列的动画实质上不是这样,队列有进有出,定时器任务在两秒后被添加到队列中,由于程序执行速度非常快,队列里面的代码理论上已经执行完了,此时的队列应该是空的。动画制作麻烦,所以我没有删除队列中的代码,大家可以把队列里的代码想象成已经执行完的代码。

setInterval() 定时器演示

和 setTimeout() 理论一样,区别在于 setInterval() 每隔一段时间就会给队列添加一个定时任务。

使用 setInterval() 有些问题需要注意,比如当代码遇到阻塞时,循环定时的任务会被累积,阻塞结束时,这些累积的任务会无视间隔时间连续执行,因为它们已经被添加到队列中。看下面的演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>演示</title>
</head>
<body>
    <script>
        let t = setInterval(() => alert("我会阻塞程序!如果你不及时点确认的话。"), 2*1000);
    </script>
</body>
</html>

看看执行结果:

当警示框弹出时,及时点击确定不会造成阻塞,因此,警示框会每隔一秒弹出一次。中间没有及时点击确认,导致任务堆积,阻塞结束后会连续显示出来。

setTimeout() 实现循环定时

let i = 0;

function timer() {
    i++;
    console.log(i);
    // 函数内定时器的回调函数会继续调用 timer()
    // 每秒自调用一次,因此实现类似死循环的效果
    setTimeout( () => { 
        timer(); 
    }, 1000);
}
// 启动函数
timer()

程序会每隔一秒输出一个值。


现在大家对于JavaScript的两种定时器是什么,如何应用的的内容应该都清楚了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多JavaScript的两种定时器是什么,如何应用的的知识,欢迎关注群英网络,群英网络将为大家推送更多相关知识点的文章。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-06-16 09:26:43 
摘要:php可以直接输出数组,有两种方法:1、用print_r(),可输出数组内容及结构,且会按照一定格式显示键和元素,语法“print_r(数组)”;2、用var_dump(),输出内容及结构,并显示元素类型,语法“var_dump(数组)”。
2022-01-06 19:12:31 
摘要:C++与PHP的区别在哪?对于C++与PHP的区别,是很多朋友都比较好奇的问题,首先PHP是在服务器端执行的脚本语言,而C++是C语言的继承,另外两者在使用上也有一定的差别,接下来小编就给大家来简单的介绍一下。
2022-04-29 12:00:53 
摘要:给大家带来一篇关于JS实现线性表的链式表示方法的实例内容的相关教程文章,内容涉及到JS、线性表、链式表示、数据结构、JS实现线性表的链式表示方法示例【经典数据结构】等相关内容,更多关于JS实现线性表的链式表示方法示例【经典数据结构】的内容希望能够帮助到大家。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部