本文主要给大家介绍了关于setTimeout时间设置为0的相关内容,setTimeout( ) 是属于 window 的 method, 但我们都是略去 window 这顶层容器名称, 这是用来设定一个时间, 时间到了, 就会执行一个指定的 method,下面这篇文章主要给大家介绍了关于setTimeout时间设置为0的相关资料,需要的朋友可以参考下。
1、开胃菜,setTimeout为何物
首先看一下w3school上面对于setTimeout的解释
setTimeout(fn,millisec) 方法用于在指定的毫秒数后调用函数或计算表达式。
很简单,setTimeout()
只执行 fn 一次,到底什么时候执行取决于第二个参数millisec设定的毫秒数,所以很多人习惯上称之为延迟,无非就是延迟一段时间后再执行里面的代码。
setTimeout(function(){ console.log('我是setTimeout'); }, 1000);
正常情况下,我是setTimeout 这句话并不会马上输出而是等1000毫秒以后会在浏览器的控制台输出。
2、主菜,js是单线程的
OK,看一个例子,这个例子的输出结果是什么?
setTimeout(function(){ console.log(1); }, 0); console.log(2); console.log(3);
出乎一些人的意料,得到的结果竟然是2、3、1。这似乎不按套路出牌啊,明明是等待了0毫秒也就是不等待直接输出啊,为啥1却在最后输出了呢?
这就需要搞清楚一个很重要的概念:js是单线程的,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
其实很好理解,就像大家去超市买东西一样,所有买东西的人都需要在收银台排队结账,正常情况下每个收银台同一时间只能为一位顾客结账,这位顾客结账完成才能为下一位顾客服务。
而浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,GUI渲染线程,浏览器事件触发线程。
javascript引擎是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个JS线程在运行JS程序。
GUI渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。但需要注意 GUI渲染线程与JS引擎是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。
事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。(当线程中没有执行任何同步代码的前提下才会执行异步代码)
其实,当js代码执行遇到setTimeout(fn,millisec)
时,会把fn这个函数放在任务队列中,当js引擎线程空闲时并达到millisec指定的时间时,才会把fn放到js引擎线程中执行。
setTimeout(fn,0)
的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在"任务队列"的尾部添加一个事件,因此要等到同步任务和"任务队列"现有的事件都处理完,才会得到执行。
HTML5标准规定了setTimeout()
的第二个参数的最小值(最短间隔),不得低于4毫秒,如果低于这个值,就会自动增加。在此之前,老版本的浏览器都将最短间隔设为10毫秒。另外,对于那些DOM的变动(尤其是涉及页面重新渲染的部分),通常不会立即执行,而是每16毫秒执行一次。这时使用requestAnimationFrame()
的效果要好于setTimeout()
。
需要注意的是,setTimeout()
只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()
指定的时间执行。
3、甜品,setTimeout的妙用
其实setTimeout是有一些妙用的,这里简单列举几个。
函数去抖
让一个函数在一定间隔内没有被调用时,才开始执行被调用方法。比如当你在使用 google 搜索内容的时候,有些关键词输入到一半,谷歌会展示一个可选列表,根据你当前输入的内容作出的一个猜测联想。需要监听文字改变,每一次改变都会调用一次回调函数,现在需要的一种实现是在用户停止键盘事件一段时间后,去发送一个请求。
var debounce = function(method, context) { clearTimeout(method.tId); method.tId = setTimeout(function(){ method.call(context); },100); }
轮训任务
js中可以使用setInterval开启轮询,但是这种存在一个问题就是执行间隔往往就不是你希望的间隔时间。
比如有个轮询任务间隔是100ms,但是执行方法的时间需要450ms,那么在200ms、300ms、400ms本来是计划中执行任务的时间,浏览器发现第一个还未执行完,那么就会放弃2、3、4次的任务执行,并且在500ms之后再次执行任务,这样的话,其实再次执行的间隔就只有50ms。使用setTimeout构造轮询能保证每次轮询的间隔。
setTimeout(function () { console.log('我被调用了'); setTimeout(arguments.callee, 100); }, 100);
延迟js引擎的调用
var p = document.createElement('p'); p.innerHTML = '我是一个p'; p.setAttribute('style', 'width:200px; height:200px;background-color:#f00; '); document.body.appendChild(p); setTimeout(function() { console.log('我被调用了'); }, 1000);
虽然setTimeout有一些妙用,但是他确实是在宏观任务队列中新增任务了,所以万万不能滥用啊。
相关推荐:
javascript函数setTimeout带参数用法实例详解
以上是setTimeout如何把时间设置为0的详细内容。更多信息请关注PHP中文网其他相关文章!

win10电脑文件夹字体大小怎么设置?win10文件夹字体大小设置方法是首先点击左下角开始,然后选择打开设置。很多小伙伴不知道怎操作,小编下面整理了文件夹字体大小设置方法步骤,如果你感兴趣的话,跟着小编一起往下看看吧!文件夹字体大小设置方法步骤1、首先点击左下角开始,然后选择打开设置。2、之后去点击“系统”。3、点击左侧的“屏幕”。4、在右边找到“更改文本、应用等项目的大小”。5、最后点击下拉,选择100%即可。以上就是【win10电脑文件夹字体大小怎么设置-文件夹字体大小设置方法步骤】全部内容

怎样设置win11电池充电上限?用户想知道win11电脑中要怎么去设置电池充电上限呢,如果使用的是win11联想电脑,就打开电脑上的电脑管家,然后点击电池充电图标,点击更改电池阈值即可设置啦,若是华为win11电脑,就打开myasus软件,点击电池健康充电选项,选择保养模式即可开始设置电源充电上限啦,不会的话,小编下面整理了win11设置电池充电上限教程,一起往下看看吧!win11设置电池充电上限教程1、联想电脑需要先下载安装联想电脑管家2、打开它,点击底部的电池充电图标,点击上方的更改电池阈值

在Windows中,我们可以在文件资源管理器中查看文件夹、文件和其他文档。您可能已经观察到,很少有文件和文件夹具有较小的图标,而很少有较大的图标。因此可以理解,有一个定制选项可用。根据文件的性质,默认设置了不同的文件夹模板。例如,在包含照片的名为Picture的文件夹中,图像具有不同的视图。包含音乐文件的音乐文件夹将具有不同的模板。同样,对于文档、视频等文件夹,每个文件夹根据其类别包含不同的模板。您还可以选择文件夹的模板并将其设置为所有其他相同类型的文件夹。在本文中,我们将学习如何将文件夹视图应

win10如何分屏操作?Win10系统中内置一个多窗口分屏功能,而这个功能很实用,不过有很多用户其实不知道要如何去为电脑进行分屏,其实实际操作起来还是非常简单的,下面就跟着小编一起来看看Win10设置分屏显示的方法,有需要的用户可不要错过。Win10设置分屏显示的指南第1步:同时单击(Windows键+I)打开Windows设置,或者您也可以单击Windows开始按钮,然后单击设置。第2步:单击系统并在左侧窗格中向下滚动,直到看到多任务处理选项。单击多任务处理。第3步:在右侧窗格中,通过单击切换

什么是iOS17上的多计时器?在iOS17中,Apple现在为用户提供了在iPhone上一次设置多个计时器的能力。这是一个可喜的变化,许多人多年来一直期待的变化。时钟应用程序在iOS16之前只允许用户一次设置一个计时器,现在可用于激活任意数量的计时器,使其成为您一次完成多个任务的理想选择。您可以在计时器屏幕中设置任意数量的计时器。启动计时器后,所有活动计时器都将在锁屏界面和通知中心显示为“实时活动”通知。从这里,您可以查看计时器关闭、暂停或停止计时器的剩余时间,而无需打开时钟应用程序。当您在时钟
![如何为您的 Windows lComputer 设置首选频段 [2023]](https://img.php.cn/upload/article/000/465/014/168773917841923.png)
几乎所有最新品牌的笔记本电脑都配备了双品牌WiFi。您可以将WiFi设置为5GHz或2.4GHz带宽。但是,事情并没有那么简单。笔记本电脑上的此功能很好地隐藏在设备管理器中,您无法从“设置”页面执行此操作。按照我们的指南为您的笔记本电脑、PC设置首选频段。注意–要切换到5GHz带宽WiFi,您需要WiFi路由器和设备都支持双频WiFi。如果它们中的任何一个都没有支持,则无法更改WiFi带宽。如何在设备上设置首选的WiFi频段设置首选频段以充分利用您的WiFi非常容易。方式1–设置首选频段步骤1–

桌面屏幕上的壁纸是系统启动后最令人兴奋和最引人注目的功能之一。它对人们产生有利的影响,并鼓励他们在感到快乐的同时提高工作效率。另一方面,更换壁纸并定期寻找它是一项耗时的任务。那么,如果你的桌面屏幕有一个动态的动态壁纸,可以让你看到各种轻松的壁纸,那不是很好吗?这也将允许用户下载任何GIF并将其设置为系统上的壁纸。在这篇文章中,我们将教您如何使用MicrosoftStore在您的PC上创建或获取动态壁纸。如何使用MicrosoftStore在Windows11上快速设置或获取动态壁

Win10专业版的鼠标dpi数值如何设置?鼠标是常用办公硬件之一,我们通常需要对鼠标的灵敏度进行调节,调整到合适我们使用的数值,不过很多用户对鼠标dpi比较陌生,不知鼠标dpi在哪里调,要怎么调,很多小伙伴不知道怎么详细操作,小编下面整理了Win10调鼠标dpi的技巧,如果你感兴趣的话,跟着小编一起往下看看吧! Win10调鼠标dpi的技巧 1、进入Windows设置选择打开备 2、左侧的选项栏切换到鼠标,在右侧的相关设置下选择他鼠标选项 3、在鼠标属性口将上方选项卡切换到针选项在下方的


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

Dreamweaver Mac版
视觉化网页开发工具

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

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

记事本++7.3.1
好用且免费的代码编辑器