首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

也谈 setTimeout

本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载 也谈 setTimeout setTimeout ,延迟一段事件执行代码,当然这是最基本的用法,这里不说基本用法。...比如这个Why is setTimeout(fn, 0) sometimes useful?, IE6 中出现的奇葩问题竟然可用 setTimeout(func, 0) 神奇地解决。...那么,为什么放入 setTimeout( func, 0 ) 中就可以呢? 其实答案已经出来了, setTimeout 会等到重绘完成才执行代码,自然无往而不利。...setTimeout 进一步理解 可以更深入的思考: setTimeout( func, 0 ) 是延迟 0ms 执行,也就是立刻执行,但为什么还是在重绘之后呢? 重绘肯定会超过 0ms 啊!...setTimeout 中的 this setTimeout 中的 this 被无数人吐槽过,老道直接说这是语言设计错误。

1.3K10

setTimeout 进阶详解

一开始我以为当setTimeout的第二个参数设置为0是直接执行的, 但没想到结果却让我很以为, 打印出的结果是2,3,1 仔细一想确实是那么一回事,因为js是单线程的下面简单分析一下 setTimeout...setTimeout(fn, millisec) 这个函数的正确解释是在js线程没有其他任务,处于空闲状态下,在millisec毫秒后执行fn函数 setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行...那么 ,setTimeout()只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。...要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()指定的时间执行

55910

setTimeout和requestAnimationFrame

目录 单线程模型 任务队列 setTimeout setTimeout和setInterval requestAnimationFrame requestidlecallback 单线程模型 JavaScript...实际上,上面的代码并不是立即执行的,这是因为setTimeout有一个最小执行时间,HTML5标准规定了setTimeout()的第二个参数的最小值(最短间隔)不得低于4毫秒。...当指定的时间低于该时间时,浏览器会用最小允许的时间作为setTimeout的时间间隔,也就是说即使我们把setTimeout的延迟时间设置为0,实际上可能为 4毫秒后才事件推入任务队列 setTimeout...setTimeout 和 setInterval区别 setTimeout: 指定延期后调用函数,每次setTimeout计时到后就会去执行,然后执行一段时间后才继续setTimeout,中间就多了误差...('我被调用了'); setTimeout(fn, 100); },100); 这个模式链式调用了setTimeout(),每次函数执行的时候都会创建一个新的定时器。

1.7K20

深入学习setTimeOut

有一个最小执行时间,当指定的时间小于该时间时,浏览器会用最小允许的时间作为setTimeout的时间间隔,也就是说即使我们把setTimeout的延迟时间设置为0,被调用的程序也没有马上启动。...那setTimeout(fn, 0)有什么用处呢?其实用处就在于我们可以改变任务的执行顺序!因为浏览器会在执行完当前任务队列中的任务,再执行setTimeout队列中积累的的任务。...当你往两个表单输入内容时,你会发现未使用setTimeout函数的只会获取到输入前的内容,而使用setTimeout函数的则会获取到输入的内容。 这是为什么呢?...未使用setTimeout函数,执行顺序是:onkeydown => onkeypress => onkeyup 使用setTimeout函数,执行顺序是:onkeydown => onkeypress...('第一个setTimeout从call SetTimeout到真正被执行:', now() - timerStart1); var timerStart2 = now(); setTimeout

83020

嘭,setTimeout炸了

~欢迎点击上方蓝字「歪码行空」快速关注~ ---- 今天要说的很简单,没有setTimeout的基本用法,也没有什么特殊用法。...就是想记录一下setTimeout的一个特殊情况,分享给可能也不知道的你们。...setTimeout的基本写法大家都不陌生,如下: setTimeout(() => { // 说,你倒计时想干什么 }, millisecond) 其中第二个参数是需要延时执行的毫秒数,大家应该都知道这个时间是不准确的...然后我突然开始怀疑setTimeout的倒计时时间问题。于是开始查,最后查到了原因,真的是这货的锅,它因为延时时间过长,炸了。 这就是今天的重点:setTimeout 的延时毫秒数是有限制的。...看完之后,以后如果你也遇到setTimeout失灵的情况,记得想起这茬。

45220
领券