摘要:单线程首先是单线程,任务队列采用先进先出,因此前面的任务不执行完,后面的任务是无法执行的,会造成阻塞。以前我一直认为如果后面的参数为,那么两秒后该函数就会执行。可实际上并不是这样。
单线程
首先js是单线程,任务队列采用“先进先出”,因此前面的任务不执行完,后面的任务是无法执行的,会造成阻塞。
setTimeout函数我们都知道该函数接受两个参数,第一个参数为字符串或者函数,第二个为延迟的时间,单位为毫秒。以前我一直认为如果后面的参数为2000,那么两秒后该函数就会执行。可实际上并不是这样。你应该这样理解,settimeout函数是在指定的延迟时间后,将该任务加入到js的任务队列中,具体执行的时间取决于任务队列中位于该任务前面所有任务的执行时间。
let a = 1; settimeout(function(){ console.log(1111); },1000); while(a>0){ a++ }
以上代码永远也不会输出1111。1s后任务加入到任务队列,因为前面是死循环,永远也执行不完,所以后面的语句无法执行。如果延迟时间为0,会出现什么状况?
setTimeout(function(){ console.log(1111); },0); fun one();
即使延迟变为0,也是先执行fun one()函数,然后输出1111。
那么问题来了,在延迟为0的情况下,fun one()执行100遍,结果会是怎么样的?
setTimeout(function(){ console.log(1111); },0); fun one(); fun one(); fun one(); fun one(); ...
不管后面有多少个函数,setTimeout里面的函数总是最后执行,即使延迟为0。有点奇怪,延迟参数设为0,也要排到后面。
最后需要说的一点就是,setTimeout函数用的是eval()函数,如果传入字符串,会被解析为函数语句执行,但是这存在一定的风险,所以setTimeout最好是传入函数,而不是字符串。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/84701.html
摘要:前言最近在学前几天看到两道题刚开始看懵懵懂懂这几天通过各种查资料慢慢的理解顿悟了对匿名函数闭包立即执行函数的理解也更深了一点在此分享给大家我的理解与总结希望能帮助大家理解因为这篇文章是我用心总结的查阅了很多的资料所以总结的比较细篇幅较长如果 前言 最近在学JS,前几天看到两道题,刚开始看懵懵懂懂,这几天通过各种查资料,慢慢的理解,顿悟了,对匿名函数,闭包,立即执行函数的理解也更深了一点...
摘要:什么是装饰器模式向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式,它是作为现有的类的一个包装。中的装饰器模式中有一个的提案,使用一个以开头的函数对中的及其属性方法进行修饰。 1 什么是装饰器模式 showImg(https://segmentfault.com/img/remote/1460000015970102?w=1127&h=563); 向一个现有的对...
摘要:广义说一切通过改变的视觉呈现都叫动画例如,按钮,链接等元素交互反馈。狭义说通过定时器连续调用函数进行元素属性改变产生的视觉动画效果。 广义说:一切通过js改变的视觉呈现都叫动画;例如,按钮,链接等元素交互反馈。狭义说:通过定时器连续调用js函数进行元素属性改变产生的视觉动画效果。 定时器 定时器是JavaScript动画的核心技术;setTimeout(),setInterval()是...
摘要:广义说一切通过改变的视觉呈现都叫动画例如,按钮,链接等元素交互反馈。狭义说通过定时器连续调用函数进行元素属性改变产生的视觉动画效果。 广义说:一切通过js改变的视觉呈现都叫动画;例如,按钮,链接等元素交互反馈。狭义说:通过定时器连续调用js函数进行元素属性改变产生的视觉动画效果。 定时器 定时器是JavaScript动画的核心技术;setTimeout(),setInterval()是...
阅读 1714·2021-09-28 09:43
阅读 1096·2021-09-23 11:22
阅读 2618·2021-09-14 18:05
阅读 1809·2019-08-30 15:52
阅读 2790·2019-08-30 10:55
阅读 1968·2019-08-29 16:58
阅读 1296·2019-08-29 16:37
阅读 3009·2019-08-29 16:25