setTimeout()

setTimeOut()和setInterval()的用法 setTimeOut()和setInterval()的用法 setTimeOut(function(){},1000); 在特定时间之后调用函数,只调用一次 setInterval(function(){},1000);每隔特定的时间调用一次函数,调用n多次,最好不要经常使用 <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">  &nbsp 阅读详情

代码

console.log('111');
setTimeout(()=>{
    console.log('222')
},1000);
console.log('333');
setTimeout(()=>{
    console.log('444')
},0);
console.log(555);

执行这样一段js代码 , 打印出来的结果是 :
111 -> 333 -> 555 -> 444 -> 222

下面来给大家分析一下(如果错误 ,欢迎纠正)

一、为什么JavaScript是单线程?

javascript语言的最大的特点之一就是单线程 ,意思就是 :只能同一时间执行同一段代码。就比如说: 我这一句循环代码需要5s来执行 ,那么后面所有的代码都要等着我这个循环结束才能继续执行 。

那么,为什么JavaScript不能像Java一样有多个线程呢?

这是因为跟这门语言的用途有关。JavaScript作为浏览器脚本语言,主要用途是与用户互动,以及操作DOM。这就决定了它只能是单线程 ,否则会带来很多复杂的同步问题。为了避免复杂性,这个特性我相信将来也不会改变。

最新的HTML5提出了Web Worker标准,允许JS脚本创建多个线程,但是子线程完全受主线程控制,不能操作DOM。所以JS还是单线程。

二、为什么上述代码会这样执行 ?

这就需要了解 任务队列
我们把需要执行的代码看成一个个任务,把任务分成两种,同步任务(sknchronous),异步任务(asynchronous)。

  • 同步任务指的是,直接在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
  • 异步任务指的是,起初不进入主线程、而进入"任务队列"(task
    queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

下面是它们的运行机制:
1.所有同步任务都在主线程上,形成一个执行栈
2.主线程之外还有一个“任务队列”,只要异步任务有了运行结果 ,就在任务队列中放一个事件
3.当执行栈中所有的任务执行完了,就去看看任务队列中有没有需要执行的事件 ,如果有的话,就结束它们的等待,进入执行栈 ,开始执行。
4.主线程不断重读上面三步
(这里还是单线程,只是多了一个任务队列)
aaa.png

三、Event Loop

主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。这是计算机系统的一种运行机制。
JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。

image.png
上图中,主线程运行的时候,产生堆和栈,栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件。只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。

执行栈中的代码(同步任务),总是在读取"任务队列"(异步任务)之前执行。

四、setTimeout 到底是同步还是异步的 ?

除了放置异步任务的事件,"任务队列"还可以放置定时事件。
setTimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。
需要注意的是,setTimeout()只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()指定的时间执行。

综上所述:
setTimeout是单线程,类似异步,但不是异步 。
最后在这里提一句 :
1.异步的三种实现方式:
1) 回调函数
回调函数不一定是异步 , 但异步一定有回调函数
2) 事件
3) promise 承诺对象

转载自:
https://www.jianshu.com/p/4c377e876dac

平衡电桥检测高压绝缘电阻的原理 检测绝缘漏电的高压拓扑如下:BMU需要连接BAT+,BAT-和PE线,并测量电池总压(Ubatt)和负母线电压(Un),并计算出正母线电压(Up)。 阅读详情

相关推荐

基于DPABI和SPM12的任务态fMRI分析笔记1——预处理

前言 原理简介 预处理

Sophia2023的博客 1万+

定时器:setTimeout()

setTimeout(function(){ console.log("执行了") },1000) 这段代码我们一般说:1秒后会执行setTimeout里面的函数,但是正确的解释应该是:1秒后setTimeout里面的函数会被推入event queue(事件队列),而事件队列里面的任务,只有在主线程空闲时才会执行。所以只有满足2个条件:一.1秒后 。 二.主线程空闲。才会执行setTimeout里面的回调函数。 需要注意的是,setTimeout()只是将事件插入了"事件队列",如果主线程执行.

Eden_Yin的博客 1788

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3086

setTimeout运行机制

setTimeout运行机制

Sink 715

C++ bitset总结

数据结构bitset 术语:某1位置位是置1,某一位复位是某一位清零。 文章目录数据结构bitset一、3种初始化方式二、位访问三、位操作四、 位集操作总结实战练习 一、3种初始化方式 bitset<32> tmp; //默认构造函数,默认全0。 bitset<32> tmp(-1); //从整形数构造 bitset<32> tmp("101"); //从包含1和0的字符串构造 二、位访问 bitset<32> tmp(256)

qq_43807092的博客 721

在 Kubernetes 上部署 Label Studio

Label Studio 是一款开源的数据标注工具,支持多种标注任务,如文本标注、图像标注、音频标注等。

啥都会一点 669

setTimeout理解

如果在设定的时间内,发生新的keydown事件,则不触发Ajax通信,并且重新开始计时。所以上面的代码执行流程是:JS执行到setTimeout时,将其交给浏览器去计时(哪怕时间是0),然后去执行同步的for循环,因为例子中的for循环执行需要5s左右,在for循环执行3秒时,浏览器已经把之前的计时器计时完毕,然后推送到JS的事件队列里,当做下一个task任务执行,当前任务(for循环)不受影响,当for循环结束后,JS线程空了,然后去事件队列中取微任务或者新的任务(setTimeout),然后执行。

weixin_41989250的博客 6443

Vue3 - 实现用户上传本地视频文件到服务器+上传进度条+暂停续传+中断取消上传等,视频上传后可在线播放预览已上传的视频,视频文件上传视频回显示例代码(支持Element、Antd等upload组件

实现视频上传和视频预览,vue3实现视频上传功能,上传视频回显,视频流上传播放功能,vue与axios上传视频并显示上传进度,upload组件实现视频文件上传视频回显,upload组件实现视频上传及进度条展示,视频上传及实时进度条显示,视频上传过程中如何中断上传,VUE3+element 上传视频,大文件分片上传+断点续传,axios大文件切片上传,Vue3上传视频后如何播放预览,上传本地视频到后端服务器及在线预览播放视频+移除视频+进度条上传,将已选视频上传服务端并可预览视频,详细实现选择视频并上传到服务

🏆 前端领域优质创作者 3114

setTimeout 用法

总的来说用法就一种: setTimeout(要执行的代码,间隔时间,参数1,参数2); 但是要执行的代码有几种写法,分别如下: 如果执行的代码不需要参数,有3种写法如下: 1,直接将js代码写在字符串中: setTimeout("alert(123)",500); 2,在字符串中调用函数: setTimeout("callFun()",500); function callFun(){ alert(456); } 3,使用匿名函数: setTimeout(()=

weixin_43833851的博客 1万+

【SystemVerilog基础】SystemVerilog Assertion 概述

断言主要是描述复杂的设计行为;是传统验证方法学一个很好的补充,可以检查到电路内部细节,相当于一种白盒验证,传统的验证方法学是纯粹的黑盒验证!property跟上面的sequence差别不大,唯一有差别可能多了两个implication(|->,|=>)注意,当有前置条件时,不满足前置条件不会fail,而是伪真!上面这个因为没有前置条件,每个周期都会去检查!注意:当没有前置条件时,不满足条件会直接fail!

MoorePlus的博客 333

122、Android Camera HAL3 框架:Request、Result、Metadata 的异步管道模型

本文深入剖析了Android Camera HAL3框架中的异步管道模型,围绕Request、Result和Metadata三个核心要素展开。作者通过实际案例(黑屏闪退问题)切入,揭示了异步模型中常见的帧序错乱陷阱。文章详细阐释了三个角色的交互机制,指出HAL3采用生产者-消费者模式的关键特征:Request与Result一一对应但不保证顺序。针对开发实践,总结了三个必须加锁的场景和回调函数的锁使用禁忌,并给出解决帧序问题的具体方案(独立帧号生成器)。最后提出五项经验性建议,强调异步模型带来的灵活性与复杂性

sundong_81的博客 214

setTimeout

所以上面的代码执行流程是:JS执行到setTimeout时,将其交给浏览器去计时(哪怕时间是0),然后去执行同步的for循环,因为例子中的for循环执行需要5s左右,在for循环执行3秒时,浏览器已经把之前的计时器计时完毕,然后推送到JS的事件队列里,当做下一个task任务执行,当前任务(for循环)不受影响,当for循环结束后,JS线程空了,然后去事件队列中取微任务或者新的任务(setTimeout),然后执行。PS:计时器和上面的default不是严格意义上的同时打出,计时器会稍稍延后一些。

weixin_46174418的博客 383

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3897

JS中的setTimeout()函数

JS中的setTimeout()函数 目录 1、setTimeout()方法 1.1、使用 clearTimeout()方法阻止函数的执行 1.2、setTimeout() 的三个及之后的参数 2、当settimeout()的时间参数为0时 3、解决在循环中setTimeout()函数输出问题 3.1、使用 let 关键字解决 3.2、使用闭...

qq_36396822的博客 4723

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaScript setTimeout() clearTimeout() 方法

HTML DOM setTimeout() 方法 定义和用法 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 语法 setTimeout(code,millisec) 参数 描述 code 必需。要调用的函数后要执行的 JavaScript 代码串。 millisec 必需

ssisse的博客 3662

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

删除提示-setTimeout()

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>删除提示</title> <style> body { margin: 0; padding: 0; } #tip ...

qq_38233172的博客 388

VB摄像头监控

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

setImmediate() vs setTimeout() 在 JavaScript 中的区别

在 JavaScript 中,和都用于调度任务,但它们的工作方式不同。

Geek技术前线 1080

setTimeout()方法

定义和用法 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 setTimeout(function(){alert("Hello");},5000);//5秒后alert出Hello 提示: 1000 毫秒= 1 秒。 提示: 使用 clearTimeout() 方法来阻止函数的执行。 var myVue myVue = setTimeout(function(){ale...

xs199562qq的博客 1752

JavaScript——setTimeout()定时器

JavaScript——setTimeout()定时器以及相关案例

2401_86247055的博客 673

setTimeout() 与 setInterval() 的区别及使用

Test1 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript"> //变量初始化 var num1 = 0; var num2 = 0; var clock1; var clock2; //定义启动器 function work(ele)

iuukai 5269

深入解析 JavaScript 中的 setTimeout() 和 setInterval()

setTimeout() 和 setInterval() 是 JavaScript 中非常常用的定时函数。合理运用它们可以实现代码的定时执行。但 setTimeout() 和 setInterval() 在使用方式和实现原理上有一些不同。本文将详细对比两者的区别,分析使用场景,帮你深入理解定时函数的精髓。​setTimeout() 用来设置一个定时器,该定时器在定时时间到达后执行提供的回调函数。其中 callback 是定时器触发后需要执行的函数,delay 是时间间隔,单位是毫秒。

爱蹦跶的全栈大A阿 2310

setTimeout()和setInterval()

setTimeout()和setInterval()两个方法都是JavaScript的计时事件 相同 1.两者都为HTML DOM Window对象的两个方法 使用可以写成 window.setTimeout(); window.setInterval(); 当然不加window也是可以的。   2.两者都有两个参数 setTimeout("javascript function

荣子 846

jquery中setTimeout()使用

Basic setTimeout() Example setTimeout(function() { // Do something after 5 seconds }, 5000); ...

qq_37555524的博客 3194

setTimeout()和setInterval()的用法与区别

        学了JavaScript都应该知道setTimeout()是延时器,setInterval()是定时器。setTimeout(表达式,延时时间)在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次,而setInterval(表达式,交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式 所以,完全是不一样的。  1.setInterval() 方法可按照...

web前端开发 2万+

js setInterval()和setTimeout()的用法

这里,intervalID 是 setInterval() 方法的返回值。​:每隔指定时间重复执行函数或代码,直到被清除。​:延迟指定时间后执行一次函数或代码。

2303_78263863的博客 841
上一篇: document.getElementById()
下一篇: opencv-python 4.图片
robot_???
博客等级 码龄8年 38粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值