最新写代码中时,看到项目中有人用到了 setTimeout(fun,0),于是想总结一下。个人理解,如果有错误的地方还请指出。THX
要想理解JavaScript的定时器是如何工作的,先要明白 JavaScript 引擎是单线程的。这个可以理解为 javascript 引擎是一个服务员,它有一个服务的队列,所有的界面元素事件,定时触发器回调,异步请求回调都要在这个任务队列里排队,等待处理。所有任务都是一个最小单位,不会中断处理。这样就可以理解 setTimeout(fun,0) 了,它并不是代表立即执行该代码,除非任务队列为空(事实上,各个浏览器在实际执行这个的时候也是有差异了,比较新的浏览器实际可能是在4ms;老版本的可能更长一点,16ms也是可能的)。而 setTimeout(fun,time) 的意思就是多少时间后将 fun 回调加到这个任务队列中,也就是至少需要time时间才会执行fun。
举个例子:
setTimeout(function () { console.log(1); }, 0); var tem = 0; for (var i = 1; i < 1000000; i++) { tem += i; }; console.log(2);
显示结果为
2
1
就是说,在执行 setTimeout 时,将 function 回调加入了任务队列,但并没有立即执行,因为js引擎还在忙着处理当前的js,而只在这段代码段执行完才去任务列表里取新的任务,所以结果就是先显示 2 后显示 1。
setInterval(fun, time)方法是,每隔一定时间将fun添加到队列中,那么问题来,如果fun执行时间比 time 要长的时候怎么办?
看一段代码
var num = 0; var time = setInterval(function () { var tem = 0; for (var i = 1; i < 99999999; i++) { tem += i; }; num ++; console.log(num); }, 100); setTimeout(function (){ clearInterval(time); }, 1000);
意思是每隔100ms执行一段代码,在1s中后清除这个定时器。但是结果呢?
显示结果为
1
2
3
也就是说,事实上,并没有执行到那么多次数。也就是说某些间隔会被跳过,这也就存在多个代码执行的间隔可能会比预期的小。原来在将定时器代码加入队列的时候,如果该定时器的代码实例存在时,该次定时器代码会被跳过。
引用一张图片,就很好理解了。
以上所述就是本文的全部内容了,希望大家能够喜欢。

settimeout和setInterval的区别:1、触发时间,settimeout是一次性的,它在设定延迟时间之后执行一次函数,而setinterval是重复性的,它会以设定的时间间隔重复执行函数;2、执行次数,settimeout只执行一次,而setinterval会一直重复执行,直到被取消。

如何使用setInterval函数定时执行代码?在JavaScript中,setInterval函数是一个非常有用的函数,它可以定时执行一段代码。通过setInterval函数,我们可以在特定的时间间隔内重复执行指定的代码。本文将详细介绍如何使用setInterval函数,并提供具体的代码示例。一、setInterval函数的基本语法如下:setInterv

可以使用clearInterval函数来停止由setInterval函数创建的定时器。setInterval函数会返回一个唯一的定时器ID,可以将该ID作为参数传递给clearInterval函数,以停止定时器的执行。

Window.setInterval() 方法的基本语法是“window.setInterval(function, delay)”,function是要重复执行的函数或代码块,delay是每次执行之间的时间间隔,以毫秒为单位。该方法是JavaScript中用于定时重复执行指定函数或代码的方法,它的使用非常简单,只需要传入要执行的函数或代码块以及重复执行的时间间隔。

setTimeout(function,duration)-该函数在duration毫秒后调用函数。这适用于一次执行。让我们看一个例子-它等待2000毫秒,然后运行回调函数alert(‘Hello’)-setTimeout(function(){alert('Hello');},2000);setInterval(function,uration)-此函数在每duration毫秒后调用function。这可以无限次进行。让我们看一个例子-它每2000毫秒触发一次警

setInterval函数是JavaScript中的一个定时器函数,允许你设置一个间隔,并在每个间隔之后执行指定的代码,需要定期处理某些任务或实时更新页面元素的情况非常有用,要注意使用setInterval时的性能和可靠性问题,并根据需要进行优化。

setinterval用法是“setInterval(function, delay);”,“function”是要执行的函数,可以是函数表达式或函数引用,“delay”是执行函数之间的时间间隔,以毫秒为单位。setInterval是JavaScript中用于周期性执行代码的函数,它接受一个函数和一个时间间隔作为参数,会按照指定的时间间隔重复执行函数。

在JavaScript中使用clearTimeout函数取消setTimeout的计时器,需要具体代码示例在JavaScript中,setTimeout函数是用来在指定的时间延迟后执行一次特定的代码。而setInterval函数则是用来在指定的时间间隔内重复执行一段特定的代码。然而,在某些情况下,我们可能需要在定时器执行之前取消它。在这种情况下,就可以使用c


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1
功能强大的PHP集成开发环境