settimeout

event-loop 事件轮循

丶灬走出姿态 提交于 2020-03-01 11:02:20
例1 setTimeout ( ( ) => console . log ( 3 ) , 100 ) setTimeout ( ( ) => console . log ( 2 ) ) consold . log ( 1 ) 废话不多我们直入主题。首先 consold.log(1) 会直接输出因为是同步函数,之后会把setTimeout(()=> console.log(2))放入异步队列,之后是setTimeout(()=> console.log(3), 100)放入异步队列( 因为有100毫秒的延迟,所以不在setTimeout(()=> console.log(2))前面 ),然后事件轮询机制会去异步队列里找有没有需要执行的函数,如果有就会放入主进程执行输出一直如此询环直到没有函数可以执行位置,最后输出是 1 2 3 例2 $ . ajax ( { url : 'http://xxxxx' , succes : ( ) => { console . log ( ' 4 ) } } ) setTimeout ( ( ) => console . log ( 3 ) , 500 ) setTimeout ( ( ) => console . log ( 2 ) ) consold . log ( 1 ) 这里多了一个ajax其实就是一个障眼法说白了ajax也是异步代码

setTimeout延时0毫秒的作用

六月ゝ 毕业季﹏ 提交于 2020-03-01 09:40:27
wizardpisces经验: 这几天做web动画,用到css3的animation,为了对一个存在的元素触发动画,可以通过添加className,可是只能触发一次,为了触发多次我尝试了先删除className后直接添加的方法,失败了,最后我通过删除和创建元素得以实现再添加className得以实现,看完这篇文章,通过 先删除元素className再setTimeout(添加元素的className,时间),得以实现多次触发效果,不过最后的原理还是有点模糊,如果各位有新颖的见解,希望不吝赐教。2014/7/25号BOSS说setTimeout会被线程放在堆栈底,与这篇文章解释有所差异。setTimeout好像有种强制重绘的能力 原文: 经常看到 setTimeout 延时0ms的javascript代码,感到很迷惑,难道延时0ms和不延时不是一个道理吗?后来通过查资料以及实验得出以下两个作用,可能还有作用我还不知道,希望得知的朋友在后面评论上不吝指出。 1、实现javascript的异步; 正常情况下javascript都是按照顺序执行的。但是我们可能让该语句后面的语句执行完再执行本身,这时就可以用到setTimeout延时0ms来实现了。 如: alert(1); setTimeout("alert(2)", 0); alert(3); 虽然延时了0ms,但是执行顺序为:1,3

异步 JavaScript

别说谁变了你拦得住时间么 提交于 2020-03-01 02:36:24
简评:如果你对 JavaScript 异步的原理感兴趣,这里有一篇不错的介绍。 JavaScript 同步代码是如果工作的 在介绍 JavaScript 异步执行之前先来了解一下, JavaScript 同步代码是如何执行的。 这里有两个概念需要了解: ** 执行上下文(Excution Context)** 执行上下文是一个抽象的概念,用于表示 JavaScript 的运行环境,任何代码都会有一个执行上下文。 全局代码运行在全局执行上下文,函数里的代码运行在函数执行上下文,每一个函数都有自己的执行上下文。 调用堆栈(Call Stack) 调用栈是一个具有 LIFO(后进先出)结构的栈,用于储存代码执行阶段所有的执行上下文。 因为 JavaScript 是单线程的,所以 JavaScript 只有一个单独的调用栈。 我们以下面例子介绍同步代码执行过程。 const second = () => { console.log('Hello there!'); } const first = () => { console.log('Hi there!'); second(); console.log('The End'); } first(); 创建全局上下文(由 main() 表示),并将全局上下文推到栈顶。然后依次将遇到函数执行上下文推到栈顶(如果函数中执行其他他函数

JavaScript中的Timer是怎么工作的

左心房为你撑大大i 提交于 2020-03-01 01:45:40
作为入门者来说,了解JavaScript中timer的工作方式是很重要的。通常它们的表现行为并不是那么地直观,而这是因为它们都处在一个单一线程中。让我们先来看一看三个用来创建以及操作timer的函数。 var id = setTimeout(fn, delay); - 初始化一个单一的timer,这个timer将会在一定延时后去调用指定的函数。这个函数(setTimeout)将返回一个唯一的ID,我们可以通过这个ID来取消timer。 var id = setInterval(fn, delay); - 与setTimeout类似,只不过它会持续地调用指定的函数(每次都有一个延时),直到timer被取消为止。 clearInterval(id); , clearTimeout(id); - 接受一个timer的ID(由上述的两个函数返回的),并且停止timer的回调事件。 要搞明白timer在内部是怎么工作的,我们还需要知道一个很重要的概念:timer的延时并不是每次都能如你所愿的。由于在同一个浏览器中所有的JavaScript都只在单一线程中执行,那些异步的事件(比如说鼠标点击,或者timer)只在执行期出现空闲的时候才会运行。这个用图最能表示清楚了,请参见下图: (点击查看大图) 在这个示例中有很多信息可以挖掘

VueJS Showing and Hiding Messages

送分小仙女□ 提交于 2020-02-28 23:16:29
问题 I have a basic CLI structure environment created. I have a component to display messages/alerts Ie: Login Failed etc… Since this component is going to be reused throughout the entire app, I figured to import it to the root App.vue file and have it handled there. It is working…sort of. It displays the messages/alerts fine, but I would like for it to hide/disappear/evaporate after a set amount of seconds. Alternatively Click a button and it hides/disappears/evaporates - I have this shown in the

nextTick实现原理 (vue 05)

我的梦境 提交于 2020-02-28 14:37:47
文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 【2.5.17】 【Vue原理】NextTick - 白话版 nextTick 是 Vue 中比较重要的一部分,源码独立而简短,稍作修改就可以拿出来为你的项目服务, 我已经有在项目中使用了 想必大家写 Vue 项目的时候,应该也有使用过 nextTick 一般我是用在数据渲染完毕之后执行某些操作 this.list = xx,xx,xx this. $nextTick (( ) = > { this.isLoading = false } ) nextTick 按我的理解,就是设置一个回调,用于异步执行 异步执行,比如,就是把你设置的回调放在 setTimeout 中执行,这样就算异步了,等待当时同步代码执行完毕再执行 但是,每设置一个 nextTick 就新建一个 setTimeout 又不实际, 毕竟一个 setTimeout 是异步,两个setTimeout 也是异步,两个都要等在 同步代码执行完毕之后才执行 那我直接只设置一个 setTimeout 不就好了 那一个 setTimeout 怎么执行多个回调呢? 1 存在 回调数组 里。每次调用 nextTick,便往数组里面 push 设置的回调 2 只注册一个 setTimeout,时间为0,用于遍历 回调数组

setTimeout,setInterval的使用小结

冷暖自知 提交于 2020-02-28 12:42:18
① setTimeout 众所周知setTimeout(fn,time)是等待一段时间后,执行函数fn。 在这个等待是异步的,也就是他不会站着茅坑,当前JS队列中的其他任务会按序执行 但这里有个问题就是time毫秒过后的fn执行问题。是立即执行?不一定。 这就像是一个买票的队伍,有正在买票的,有排在后面等待买票的。而setTimeout就相当于刚排到fn买票的时候他突然发现钱包一时翻不出来。 所以他就让后面的人先买。过了time时间找到钱包后,如果现在没人买票的话,他可以立即买票。否则他就只能去排队了(当所有队列中的内容执行结束后才执行)。 <input type="text" id="io" /> <div id="test" style="width:200px;height:400px;overflow:scroll;"></div> <script> //这个函数的执行时间在IE下肯定是大于100ms的 function lost() { var test = document.getElementById("test"); var t1 = new Date(); var html = []; for (var i = 0; i < 10000; i++) { html.push('<span>look at here</span>'); } test.innerHTML

setTimeout参数

倖福魔咒の 提交于 2020-02-27 13:36:04
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 setTimeout(code,millisec) code:要调用的函数后要执行的 JavaScript 代码串。 millisec:在执行代码前需等待的毫秒数。 1.将函数名称作为调用句柄(直接调用函数名称): function hello(){ alert("hello"); } setTimeout(hello,3000); 这里不能写成 setTimeout(hello(),3000); ,这样为立即执行调用。 但是可以 setTimeout("hello()",3000); ,这里hello()其实就是所谓的JavaScript 代码串。 2、函数带参数: var userName="jack"; function hello(name){ alert("hello,"+name); } setTimeout('hello(userName)',3000); 这里必须用'',不能写成 setTimeout(hello(userName),3000); ,不然会立即执行调用。 但这种写法不够直观,而且有些场合必须使用函数名,下面用一个小技巧来实现带参数函数的调用: <script language="JavaScript" type="text/javascript"> var userName=

函数节流

断了今生、忘了曾经 提交于 2020-02-27 02:52:58
在某些高频度触发的事件中绑定操作需要用到节流函数 如在页面大小发生改变时 window.addEventListener("resize",function () { console.log(1) }) 这里并没有涉及到什么复杂的运算,如果我们需要监听页面大小变化执行复杂的运算时,浏览器可能会崩溃。 节流函数封装如下 function throttle(fn,context) { clearTimeout(fn.tId) fn.tId = setTimeout(function () { fn.call(context) },1000) } window.addEventListener("resize",throttle(show)) function show() { console.log(1) } function throttle(fn) { return function () { clearTimeout(fn.tId) fn.tId = setTimeout(fn,1000) } } 来源: CSDN 作者: 叽里咕噜写代码 链接: https://blog.csdn.net/qq_38280242/article/details/104520067

css实现酷炫的加载loading效果

牧云@^-^@ 提交于 2020-02-26 22:21:17
常用的页面加载css效果; 结合以下css效果 可以在页面中通过setTimeout来控制加载时间,时间到了之后然后把加载效果隐藏掉即可 示例如下: .unshow{ display:none; } <!--动态加载效果--> <div class="spinner"> <div class="rect1"></div> <div class="rect2"></div> <div class="rect3"></div> <div class="rect4"></div> <div class="rect5"></div> </div> //正在加载中... setTimeout(function(){ $('.spinner').addClass('unshow'); },1000*5) 原文如下: https://blog.csdn.net/weixin_42532454/article/details/87191438 效果贴图; 1、 2、 3、 4、 5、 6、 7、 8、 来源: oschina 链接: https://my.oschina.net/u/2847877/blog/3157863