JS中计时器setTimeout以及setInterval的使用以及for循环中延迟打印的坑

用js做一个倒计时(时分秒),js中倒计时器怎么实现 1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 02 分减去22分,结果会是负数的,所以要转换为毫秒;2.用时间戳来做,用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数;3.把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)。利用JavaScript函数做一个简单的倒计时。 阅读详情

JS中的函数使用

一、setTimeout:

格式:

var intervalID = scope.setTimeout(function[, delay, param1, param2, ...]) // 参数在延时时间到达后,将作为该函数的传参,但是在不同浏览器存在兼容性问题,若需使用需做兼容性处理,具体参考链接1
var intervalID = scope.setTimeout(function[,delay]) 
var intervalID = scope.setTimeout(code[,delay]) // 这里的code为字符串,例如"alert('hello world')",不推荐此方法,有安全风险,,来自MDN网站

delay为需要延迟的时间,单位为毫秒(可选参数,忽略该参数,则delay取默认值0,将立刻执行或尽快执行,实际的延迟时间可能比期待的delay值长;
function为延迟一定时间后执行的函数
链接1

如何在延迟时间到达前停止setTimeout函数执行:

var t = setTimeout(function[,delay]);
       clearTimeout(t); // 停止上面计时器内部函数的执行

功能:通常在延迟一定时间后仅执行一次,但是也可以实现间隔一定时间循环执行的功能
代码实践:
1、延迟3秒弹出一次警示框

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type='text/javascript'>
    setTimeout(alert_Action, 3000);//setTimeout('alert_Action()', 3000);/ setTimeout(alert_Action(), 3000)//这种写法会立即执行
    var alert_Action = function(){
    alert('我将在3秒后弹出');
    }
</script>
</heaad>

<body>
    <h1>JS输出HTML内容</h1>
</body>
</html>

代码执行 结果
在这里插入图片描述
2、间隔1秒打印一次信息
(在函数内部调用自身,就可以实现无限次数执行该函数)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type='text/javascript'>
    var num = 0
    function countNum() {
        console.log('当前的num值为:' + num);
        num++
        setTimeout(countNum, 1000);
    }
    countNum()
</script>
</heaad>
<body>
    <h1>JS输出HTML内容</h1>
</body>
</html>

代码执行结果
在这里插入图片描述
3、间隔一定时间打印一次,指定打印次数
(使用for循环限制执行函数的次数)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type='text/javascript'>
    var num = 0
    function countNum() {
        console.log('当前的num值为:' + num);
        num++
    }
    for(let i = 0;i < 13;i++){
        setTimeout(countNum, 1000 *(i+1));
    }
</script>
</heaad>
<body>
    <h1>JS输出HTML内容</h1>
</body>
</html>

代码执行结果
在这里插入图片描述
4、在学习的过程中意外的发现了一个坑:
js中延迟打印for循环,如果打印的信息是动态改变的,最后打印出来的结果都是同一个,具体见下面的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type='text/javascript'>  
     for(var i=0 ; i<10; i++) {
         setTimeout(function() {
         console.log(i);
        }, 1000);
        }
</script>
</heaad>
<body>
</body>
</html>

代码执行结果:10个10
但是下面这组代码同样也是延迟打印for循环,却能正确打印我们想要的信息

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type='text/javascript'>
        for (let i = 0; i < 10; i++) {
            (function (i) {
                setTimeout(function () {
                    console.log(i);
                }, 1000);
            })
            (i);
        }
</script>
</heaad>
<body>
</body>
</html>

代码执行结果:0 1 2 3 4 5 6 7 8 9
在这里插入图片描述
导致这种差异的原因是什么呢,于是我就去晚上各种搜索,发现原因如下:
1、JS引擎就是以单线程的机制来运行代码,setTimeout()该函数是属于异步执行的,当执行到setTimeout()代码时,会将该函数放在队列中,由专门负责计时的线程开始计时,计时完毕并在同步任务执行结束后,会通知执行代码的线程执行setTimeout()内的代码。在这里for循环一共执行10次,因此队列中依次放了10个待执行的setTimeout函数,执行该函数前for循环已经执行完毕。
2、var 与 let 在for循环中的区别

for(let i = 0;i < 10;i++){ // let 为块级变量,只在for循环内部起作用
    console.log('i',i);
}

当i = 0 和i = 1时声明的变量i是不同的,这里for循环执行结束后,会有10个不同的变量,他们的值分别为0-9

for(var i = 0;i < 10;i++){ // var声明的为全局变量
    console.log('i',i);
}

var 声明的变量是全局变量,在整个脚本中都可以用,for循环每执行一个迭代,i都会重新赋值,并覆盖初值,for循环结束的结果为一个变量 i = 10,队列中10个setTimeout函数内部的i都指向了同一个i ,故最后打印10个10;
而let 声明的为块级变量,只在当前的for循环中有效,并且在for循环中每次迭代let 都是重新创建一个变量,并不会覆盖之前的变量,因此for循环结束后,会有10个变量,它们的值依次为0-9;

这也解释了为什么这两种方式打印for循环时的结果一个是10个10,一个是一次打印0-9
在这里放一下我看的几个文章的链接:
一文看懂JS的异步
在for循环中var和let的区别
在for循环中使用let和var的区别

二、setInterval
格式:

var intervalID = scope.setInterval(func, delay, [arg1, arg2, ...]);
var intervalID = scope.setInterval(code, delay); // 与setTimeout()相似,该方法存在安全风险,不推荐使用,来自MDN网站

与setTimeout相似,函数内部代码开始执行的时间可能会晚于delay毫秒
setInterval方法可以传递参数,如下面代码所执行的那样

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type='text/javascript'>
        function f() {
            for (let i = 0; i < arguments.length; i++) {
                console.log(arguments[i])
            }
        }
        setInterval(f,1000,'hello world','aaaaaaaaa','bbbbb','ccccc','dddddddd')
</script>
</heaad>
<body>
    <h1>JS输出HTML内容</h1>
</body>
</html>

代码执行结果:每间隔1秒会打印一次 ‘hello world’,‘aaaaaaaaa’,‘bbbbb’,‘ccccc’,‘dddddddd’
在这里插入图片描述
功能:每次调用同一个函数无限循环执行,delay时间已经包含了代码运行时间,也就是相邻两次调用该函数的时间为delay毫秒。
如何结束该函数的执行:

var  intervalID = setInterval(func, delay, [arg1, arg2, ...]);
clearInterval(intervalID) // 停止setInterval的循环执行
【JS高阶】定时器、线程进程、事件循环EventLoop(/回流重绘)、Promise 1.宏任务(从上到下、从左到右的整体)2.微任务的Event Queue(Promise.then,async / await整体,process.nextTick【node环境】)3.宏任务的Event Queue(setTimeout / setInterval / setImmediate【node环境】)4.同一轮微任务队列中,依次顺序执行 process.nextTick 、queueMicrotask、Promise.then和async/await5.同一轮宏任务队列。 阅读详情

相关推荐

从无名到有名,老子一句话照见 SAP BTP 开发的架构次第

摘要: 在SAP BTP项目中,过早命名服务和系统边界是常见陷阱。老子「无名,天地之始;有名,万物之母」的哲学启示开发者:应先观察业务流、数据流等本质问题,而非急于用技术名词(如CAP、Kyma)切割需求。SAP的Clean Core理念强调保持核心系统清澈,通过Side-by-Side扩展在BTP上生长功能。命名阶段需将业务语义凝结为领域模型(如BusinessPartnerRisk),形成稳定契约。开发难点在于克制——不盲目使用平台能力(如Event Mesh),而是根据场景谨慎定义事件、权限等,避免技

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2338

JavaScript中setTimeout()的用法详解

要使用 clearTimeout( ), 我们设定 setTimeout( ) 时, 要给予这 setTimout( ) 一个名称, 这名称就是 timeoutID , 我们叫停时, 就是用这 timeoutID来叫停, 这是一个自定义名称,。这处的 flag 是一个变数, 可任意取名, 我们用 flag来称呼这变数的原因, 是因为这变数好处一支旗, 将旗竖起 (flag is on), 就会产生一个作用, 将旗放下 (flag is off), 就产生另一个作用。

suwu150 12万+

JavaScript计时器的实现方法

你可以根据自己的需求进行修改和扩展,例如添加开始、暂停、重置功能,改变显示样式等。计时器是JavaScript中常用的功能之一,它能够在网页中实现倒计时、计时器等功能。标签中,将其插入到HTML页面中。当页面加载完成后,你将看到一个从60开始递减的倒计时,直到倒计时时间为0,显示"时间到!变量来设置倒计时的初始时间,这里设置为60秒。函数,该函数用于更新显示倒计时的元素内容。函数清除计时器,并将倒计时显示为"时间到!函数将每秒执行一次,实现了倒计时的效果。属性将倒计时时间显示到页面上,并将。

DevPulse的博客 559

JS【详解】setTimeout 延时(含清除 setTimeout,计时开始时间,0 秒延时解析,多 setTimeout 执行顺序,setTimeout 应用场景,网红面试题)

setTimeout 是一个 js 内置的函数,用于延时执行代码。

朝阳39的博客 1万+

在centos7部署k8s搭建kubernetes集群

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找

山东梅长苏 1万+

光模块基础知识【快速入门】02

光模块是用于交换机与设备之间传输的载体,是光纤通信系统中的核心器件。主要作用是发射端将设备的电信号转换成光信号。 光纤通道光模块和以太网光模块 光纤通道光模块 光纤通道(FC, Fiber Channel)是一种高速网络数据传输协议。光纤通道协议可以有序无损地传输原始数据,它主要用于在数据中心、电脑服务器、交换机与存储网络中进行数据传输。 FC光模块遵循FC协议,充当着光纤通道系统之间的接口,也是光纤存储网络设备间的接口。它们主要用于数据中心的光纤通道存储网络链接中。 FC光模块具有小型化和低.

Jin Hanquan的博客 3万+

JS setTimeout()与setInterval()的区别

JS setTimeout()与setInterval()的区别 李四–x 张三: 我很好,谢谢! 李四-x 王五: 我很好,谢谢! Note right of 王五: 李四想了很长时间, 文字太长了不适合放在一行. 李四–>>张三: 打量着王五… 张三->>王五: 很好… 王五, 你怎么样? 这将产生一个流程图。: ```mermaid graph LR A[长方形...

JackDan9 2041

SiC MOSFET驱动设计实战:从特性解析到电路优化

本文深入解析SiC MOSFET的核心特性及其驱动电路设计要点,涵盖高温稳定性、快速开关能力等关键特性,并提供驱动电压配置、电流能力计算、布局优化等实用方案。特别针对第三代电力电子半导体SiC MOSFET的驱动要求,分享STGAP1AS等典型驱动方案的应用技巧,助力工程师解决高频应用中的EMI和热管理挑战。

weixin_29230865的博客 366

settimeout需要清除吗_关于JavaScript/TypeScript中的setTimeout和setInterval

setTimeout、setInterval函数在JavaScript和TypeScript中又被经常称作高级定时器函数。通常可以这样使用:定时器函数,顾名思义,经过一段时间的延迟(即为参数interval的值)后,指定的函数会被调用。而两个函数的主要区别在:setTimeout函数只会执行一次,而setInterval函数会反复执行。听起来很不错,通过这两个函数可以实现很多有趣并且有用的东西(其...

weixin_39902472的博客 1766

Streamlit(九) widgets-input

st.text_input / st.number_input / st.date_input / st.time_input 源码路径:${python}\Lib\site-packages\streamlit\elements\text_widgets.py(number_input.py, time_widgets.py) st.text_input st.text_input(label, value="", max_chars=None, key=None,\

heianduck的博客 3354

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

js中的for循环结束后设置执行事件( 与setInterval和setTimeout一起用)

在js for循环中的定时器。正常来讲循环多少次就会触发多个定时 例如 var time for (var i=0;i<3;i++){ time=setTimeout(()=>{ console.log('定时器') },100) }   这样会打印出3次定时器 ...

weixin_30808253的博客 2188

统信UOS/麒麟ARM桌面版,不联网也能用Docker部署MySQL 5.7(离线部署详解)

本文详细介绍了在统信UOS/银河麒麟ARM桌面版系统中,如何离线部署MySQL 5.7的完整流程。通过Docker技术实现环境隔离和依赖封装,解决了封闭网络环境下的部署难题,包括资源准备、系统配置、容器化部署及安全加固等关键步骤,为政企和科研场景提供实用解决方案。

weixin_30892037的博客 230

计时器点击后延迟代码_你不知道的JavaScript计时器知识

本文系翻译,下面正文开始!?几周之前,我在推特上发了这个面试题:在开始之前,先在你脑海中回答这个问题推特上大约一半的回答都是错误的。答案并不是 V8(或者虚拟机)!!虽然“JavaScript”计时器” 很出名,但是 setTimeout 和 setInterval 函数并不是 ECMAScript 规范或者任何 JavaScript 引擎实现。定时器由浏览器实现,在不同浏览器中的实现也...

weixin_36467693的博客 225

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储 508A内部存储区介绍 Data Zone Config Zone 508A Config Zone配置(自定义) - ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁

HowieXue 薛永浩的博客 2万+

26、遥感图像无监督变化检测方法解析

本文详细解析了遥感图像中的无监督变化检测方法,重点介绍了基于快速模糊 C-均值聚类的无监督变化检测方法(CDFFCM)在滑坡映射中的应用。CDFFCM 方法利用图像结构信息和高斯金字塔技术,提高了检测的准确性,减少了参数数量,并缩短了计算时间。该方法通过与传统方法的对比,展现出在高分辨率遥感图像滑坡检测中的显著优势。此外,文章还探讨了 CDFFCM 的未来发展趋势,包括技术融合、多模态数据应用以及智能化与自动化方向。

game4的博客 150

关于JavaScript计时器,你需要知道的全部知识

本文系翻译,下面正文开始!????几周之前,我在推特上发了这个面试题:在开始之前,先在你脑海中回答这个问题推特上大约一半的回答都是错误的。答案并不是 V8(或者虚拟机)!!虽然“Java...

前端开发博客 536

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

浅谈JavaScript计时器

JavaScript计时器 1.什么是JavaScript计时器? 在JavaScript中,我们可以在设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。 2.计时器类型 一次性计时器:仅在指定的延迟时间之后触发一次。间隔性触发计时器:每隔一定的时间间隔就触发一次 3.计时器方法 1):一次性计时器 A):setTimeout(): 指定的延迟时间之后...

anang1264的博客 138

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

javascript毫秒计时器_关于JavaScript计时器你需要知道的全部知识

几周之前,我在推特上发了这个面试题:*在开始之前,先在你脑海中回答这个问题*推特上大约一半的回答都是错误的。答案并不是 V8(或者虚拟机)!!虽然“JavaScript 计时器” 很出名,但是 setTimeout 和 setInterval 函数并不是 ECMAScript 规范或者任何 JavaScript 引擎实现。定时器由浏览器实现,在不同浏览器中的实现也会有所不同,Node.js 也实现...

weixin_39793434的博客 140

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

js定时器介绍:倒计时定时器setTimeout、间隔定时器setInterval

js定时器介绍:倒计时定时器setTimeout、间隔定时器setInterval

YY的博客 4851

JavaScript网络地址作为参数_关于JavaScript计时器你需要知道的全部知识

几周之前,我在推特上发了这个面试题:* 在开始之前,先在你脑海中回答这个问题 *推特上大约一半的回答都是错误的。答案并不是 V8(或者虚拟机)!!虽然“JavaScript 计时器” 很出名,但是 setTimeout 和 setInterval 函数并不是 ECMAScript 规范或者任何 JavaScript 引擎实现。定时器由浏览器实现,在不同浏览器中的实现也会有所不同,Node.js 也...

weixin_39628498的博客 101

js计时器方法的使用

js中计时器重要使用window.setInterval()方法和window.setTimeout()方法, 其中setInterval()方法的作用是每隔一段时间执行一次方法,而window.setTimeout()在一段时间内调用函数。 setTimeout()方法一般通过调用自身迭代的方式实现计时器。与这两个方法对应的,还有清除这两个函数效果的 两个方法,分别是window...

153

JavaScript中的定时器详解

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

apple_54470279的博客 1万+

定时器和计时器

调度:setTimeout和setInterval 我们可能决定不立即执行某个功能,但在某个时间之后执行。这叫做“安排一个电话”。 它有两种方法: setTimeout允许我们在一段时间后运行一次函数。 setInterval允许我们重复运行一个函数,从时间间隔开始,然后以该间隔连续重复。 这些方法不是JavaScript规范的一部分。但是大多...

3230

关于 js:4. 异步机制与事件循环

同步代码就是一行一行、按顺序执行的。当前行没有执行完,下一行不能动。ABC每一行都在主线程中立即执行。执行过程是“阻塞式”的,一步接一步。代码执行逻辑清晰;会阻塞后续代码执行(如文件读取、网络请求都在等);无法应对高延迟操作(如 I/O、Ajax)。异步指部分代码注册后,延迟执行,而不会阻塞后面的代码。这种设计来源于浏览器环境需要执行大量耗时操作(网络、动画、计时器、用户事件)但又不能卡住主线程。// 异步:定时回调}, 1000);ACB打印 A;setTimeout。

Triste__chengxi的博客 1981

JavaScript概述三(循环结构+BOM浏览器对象模型+JSON对象)

JavaScript中的普通循环和Java中的普通循环基本类似,此处以for循环为例,while和do……while便不再赘述。

qq_51768153的博客 642
上一篇: JS基础笔记之循环语句
下一篇: 用JS实现对栈的操作
programmer_trip
博客等级 码龄7年 3187粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值