首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IE8 setInterval和setTimeout在49天的正常运行时间后立​​即触发

IE8 setInterval和setTimeout在49天的正常运行时间后立即触发是因为IE8的JavaScript引擎在处理定时器时存在一个32位有符号整数的限制。这意味着定时器的最大延迟时间是2^31-1毫秒,约为24.85天。超过这个时间后,定时器会立即触发。

为了解决这个问题,可以使用以下方法之一:

  1. 使用定时器管理库:可以使用第三方的定时器管理库,如moment.js、lodash等,来处理定时器的管理。这些库可以自动处理IE8的限制,并提供更可靠的定时器功能。
  2. 分割定时器:将长时间的定时器任务分割成多个较短的定时器任务。例如,将49天的任务分割成多个24小时的任务,每个任务结束后再设置下一个定时器。
  3. 使用Web Workers:Web Workers是HTML5的一项技术,可以在后台运行脚本,不会阻塞主线程。可以将长时间的任务放在Web Worker中执行,而不是使用定时器。

总结起来,IE8的setInterval和setTimeout在49天后会立即触发,这是由于IE8的JavaScript引擎的限制所致。为了解决这个问题,可以使用定时器管理库、分割定时器任务或者使用Web Workers来处理长时间的定时器任务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

setTimeout那些事

:让JS从现在开始,经过指定时间,执行相应函数。...从方法名大部分现象来看,很容易产生以上误解。我们理解了JS主线程特点,知道了它会优先完成同步任务,同步任务执行过程中,不会执行其它任务。...实际上,setTimeout事情是:指定delay时间,将指定方法作为异步任务添加到异步任务队列中。...你是说JS主线程步同任务执行时间很长,并且异步队列中只有我往其中添加任务,导致我异步队列中重复添加任务没有及时被执行,然后JS主线程空闲,我添加多个任务就会连续执行,是吗?...3.2 防止事件疯狂触发 除了点击这种单次事件,浏览器上有一些会疯狂触发事件,例如onreaize事件。如果给这个事件绑定了处理函数,浏览器窗口大小改变时候会很高频地触发处理函数。

2K00

setTimeout那些事

:让JS从现在开始,经过指定时间,执行相应函数。...从方法名大部分现象来看,很容易产生以上误解。我们理解了JS主线程特点,知道了它会优先完成同步任务,同步任务执行过程中,不会执行其它任务。...实际上,setTimeout事情是:指定delay时间,将指定方法作为异步任务添加到异步任务队列中。...你是说JS主线程步同任务执行时间很长,并且异步队列中只有我往其中添加任务,导致我异步队列中重复添加任务没有及时被执行,然后JS主线程空闲,我添加多个任务就会连续执行,是吗?...3.2 防止事件疯狂触发 除了点击这种单次事件,浏览器上有一些会疯狂触发事件,例如onreaize事件。如果给这个事件绑定了处理函数,浏览器窗口大小改变时候会很高频地触发处理函数。

1.6K10

第46天:setIntervalsetTimeout区别

1、setTimeout 定义用法: setTimeout()方法用于指定毫秒数调用函数或计算表达式。  ...区别 通过上面可以看出,setTimeoutsetinterval最主要区别是: setTimeout运行一次,也就是说设定时间触发运行指定代码,运行结束。...如果运行代码中再次运行同样setTimeout命令,则可循环运行。...( 要循环运行,需函数自身再次调用 setTimeout()) 而 setinterval是循环运行每到设定时间间隔就触发指定代码。这是真正定时器。...setinterval使用简单,而setTimeout则比较灵活,可以随时退出循环,而且可以设置为按不固定时间间隔来运行,比如第一次1秒,第二次2秒,第三次3秒。

96210

setTimeout分析浏览器线程

1. setTimeout表象   setTimeout定义很简单,教科书上说,setTimeout() 方法用于指定毫秒数调用函数或计算表达式。...【事件触发线程】   JavaScript脚本执行不影响html元素事件触发t1时间段内,用户点击鼠标被浏览器事件触发线程捕捉形成一个鼠标点击事件,由其它线程异步传到任务队列尾。...是JavaScript引擎执行再设置新setTimeout定时,理论时间间隔>=10ms;第二段自setInterval设置定时,定时触发线程会不断每隔10ms产生异步定时事件并放到任务队列尾,...可以看出,setInterval()前两次间隔时间只有4ms。因为setInterval()第一次被触发,里面的方法并没有马上被执行,而是等待同步代码执行结束才被执行,这个过程用了6ms。...3.5 setTimeout()与setInterval()案例总结   总的来说,setTimeout()setInterval()都不能满足精确时间间隔。

1.1K40

JS快速入门(二)

(代码字符串或函数, 等待毫秒数, 参数 1, 参数 2…) setInterval(代码字符串或函数, 运行间隔毫秒数,参数 1, 参数 2…) 弹框 DOM DOM结构及节点 常用节点获取方法属性...定时器 定时器方法 方法 说明 清除定时器方法 setTimeout() 指定毫秒数调用函数或计算表达式 clearTimeout() setInterval() 按照指定周期(毫秒)来调用函数或计算表达式..."JS语句",毫秒) setInterval("JS语句",时间间隔) // 指定时间之后执行一次相应函数 var timer = setTimeout(function(){alert...,规定了浏览器什么时刻执行什么事情 事件举例:鼠标单击,双击,键盘输入,页面或图像载入 事件三要素 事件源:谁触发,一般指某个元素节点 事件:怎么触发 事件处理程序:触发发生了什么事情 事件绑定...,如果不考虑 IE8 以下浏览器兼容性,推荐使用 key 来代替 keyCode charCode 窗口事件 窗口事件浏览器窗口发生变化时触发,其中包括窗口大小更改,加载窗口,关闭窗口,窗口滚动等

6.5K30

一次搞懂Event loop

它可能会是一个独立运行在每一个tick结束算法。执行环境拥有较大选择空间,它可能会在每一个任务队列执行渲染,也可能执行多个任务队列而不渲染。...因为V8是单线程同一时间只能干一件事情,但是呢文件读取,网络IO处理是很缓慢,并且是不确定,如果同步等待它们响应,那么用户就起飞了。...(其实也不太准确....) timers 事件循环跑到这个阶段时候,要检查是否有到期timer,其实也就是setTimeoutsetInterval这种类型timer,到期了,就会执行他们回调...手动触发process.exit(EXIT_CODE)不会触发该事件 setInterval会导致node进程不能正常退出,但是如果希望即使有setInterval也能正常退出怎么办(有一些循环并不希望挂起...),或者event loop中没有可执行事件队列 时触发

1K80

你所不知道setTimeout

2, setTimeout运行机制 setTimeoutsetInterval运行机制是,将指定代码移出本次执行,等到下一轮Event Loop时,再检查是否到了指定时间。...由于前面的任务到底需要多少时间执行完,是不确定,所以没有办法保证,setTimeoutsetInterval指定任务,一定会按照预定时间执行。...这意味着setTimeout最多只能推迟执行2147483647毫秒(24.8天),超过这个时间会发生溢出,导致回调函数将在当前任务队列结束立即执行,等同于setTimeout(f,0)效果。...比如,网页开发中,某个事件先发生在子元素,然后冒泡到父元素,子元素事件回调函数,会早于父元素事件回调函数触发。...只有当两次触发之间时间间隔大于事先设定值,这个新函数才会运行实际任务。假定两次Ajax通信间隔不小于2500毫秒,上面的代码可以改写成下面这样。

1.8K121

JavaScript 内存管理 & 垃圾回收机制

2,fn()执行完毕,两个对象都已经离开环境,标记清除方式下是没有问题,但是引用计数策略下,因为ab引用次数不为0,所以不会被垃圾回收器回收内存,如果fn函数被大量调用,就会造成内存泄漏。...IE7与IE8上,内存直线上升。...垃圾回收周期性运行,如果分配内存非常多,那么回收工作也会很艰巨,确定垃圾回收时间间隔就变成了一个值得思考问题。...IE6 垃圾回收是根据内存分配量运行,当环境中存在 256 个变量、4096 个对象、64K 字符串任意一种情况时候就会触发垃圾回收器工作,看起来很科学,不用按一段时间就调用一次,有时候会没必要...总结 一般不用 setInterval,而用 setTimeout 延时递归来代替 interval。 setInterval 会产生回调堆积,特别是时间很短时候。

45410

从一个超时程序设计聊聊定时器方方面面

代码1中,我们设定定时器每隔1秒触发一次,但在实际运行过程中,无法保证每隔1秒执行一次。如果间隔时间无法保证,例如延后了,那么总执行时间就要长于允许时间。...实际项目开发中,经常会有接口轮询操作,每隔一定时间向服务器发起一次查询操作。在这种场景中,setInterval就不合适了,取而代之的当是setTimeout。...因为线程被阻塞,定时器没有应该触发时间触发,看起来像是被丢弃了,这便是定时器丢弃行为。从本质上看,丢弃行为延时行为是一致。 从这点来看,也说明定时器时间是靠不住。...如果要求每隔一个固定时间间隔就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰问题,尤其是每次函数调用需要繁重计算以及很长处理时间,那么最好使用setTimeout...当obj.y1000毫秒运行时,this所指向已经不是obj了,而是全局环境。 解决这个问题,有三种方法。

1.4K20

JavaScript各种定时器总结

我们分别说一说setTimeoutsetInterval原理以及区别 setTimeout setInterval setTimeoutsetInterval执行原理其实差不多,关键是在于两个定时器对于回调函数执行时机问题...,setTimeout是将回调函数推入任务队列,并且每一次执行任务队列时候判断这个定时任务时候到时间执行了,图中假定是300毫秒,如果执行到定时任务时候发现距离推入任务队列时间以及 >= 300...setIntervalcallback执行完毕才执行,这样就有可能出现同一时间触发多次setIntervalcallback,然后导致页面的奇怪现象。...建议使用setTimeout代替setIntervalsetTimeoutcallback中,知心完重新新建一个setTimeout。这样就保证了每一次只会有一个定时任务执行。...requestAnimationFrame 日常使用setTimeout中,我们最常用就是用来制作动画(操作dom)定时访问接口。

60120

BOM

应用背景:当页面的图片很多时,从用户访问到 onload 触发可能需要较长时间,会影响到用户体验,此时用 DOMContentLoaded 事件更合适。 用法 load 事件类似。...()定时器 window.setTimeout(调用函数,[延迟毫秒数]); 用于设置一个定时器,时间执行调用函数。...(回调函数,[延迟毫秒数]); setTimeout()基本一样,不一样是,setInterval()会重复调用回调函数,每隔一段时间,就调用一次回调函数。...(this); }, 200); 方法调用中谁调用 this,this 就指向谁 注意:匿名函数箭头函数区别:匿名函数传统方式一样会创建独有的this对象(触发事件元素),而箭头函数是继承绑定它所在函数...同步:前一个任务结束再执行下一个任务。 异步:可以同时执行多个任务。 JS 为防止任务有排队或者等待时间较长问题,把任务分为同步任务异步任务两大类。 同步任务都在主线程上执行,形成一个执行栈。

1.2K20

知识点归纳笔记:关于浏览器内核多线程机制

一、什么是浏览器内核 浏览器内核浏览器底层最核心最基础那一部分,它主要负责对网页当中 html、 css、 JavaScript进行解释然后浏览器当中进行渲染最终呈现给用户,也就是说内核工作就是渲染...3、浏览器定时器触发线程(setTimeoutsetIntervalsetTimeout setInterval所在线程。...该线程只是计时,一旦计时完毕,会将触发脚本添加到 JavaScript引擎处理队列中,等待 JavaScript引擎空闲再执行。...注意, W3C HTML标准中规定,规定要求 setTimeout中低于 4ms时间间隔算为 4ms。...注意,该线程只是触发触发要执行代码依然要放到JS引擎线程中去执行。 5、浏览器http异步请求线程 XMLHttpRequest连接后会通过浏览器新开一个线程请求。

82610

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

: GUI渲染线程与JS引擎线程互斥 由于JavaScript是可操纵DOM,如果在修改这些元素属性同时渲染界面(JS线程UI线程同时运行),那么渲染线程前后获得元素数据就可能不一致了。...setTimeout,是如何等待特定时间才添加到事件队列中?...虽然代码本意是0毫秒就推入事件队列,但是W3CHTML标准中规定,规定要求setTimeout中低于4ms时间间隔算为4ms。...因为每次setTimeout计时到就会去执行,然后执行一段时间才会继续setTimeout,中间就多了误差(误差多少与代码执行时间有关) 而setInterval则是每次都精确隔一段时间推入一个事件...就算正常间隔执行,多个setInterval代码执行时间可能会比预期小(因为代码执行需要一定时间) 譬如像iOSwebview,或者Safari等浏览器中都有一个特点,滚动时候是不执行JS,如果使用了

49420

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

引擎是单线程, 如果处于阻塞线程状态就会影响记计时准确) 因此通过单独线程来计时并触发定时(计时完毕,添加到事件队列中,等待JS引擎空闲执行) 注意,W3CHTML标准中规定,规定要求setTimeout...GUI渲染线程与JS引擎线程互斥 由于JavaScript是可操纵DOM,如果在修改这些元素属性同时渲染界面(JS线程UI线程同时运行),那么渲染线程前后获得元素数据就可能不一致了。...虽然代码本意是0毫秒就推入事件队列,但是W3CHTML标准中规定,规定要求setTimeout中低于4ms时间间隔算为4ms。...因为每次setTimeout计时到就会去执行,然后执行一段时间才会继续setTimeout,中间就多了误差(误差多少与代码执行时间有关) 而setInterval则是每次都精确隔一段时间推入一个事件...就算正常间隔执行,多个setInterval代码执行时间可能会比预期小(因为代码执行需要一定时间) 譬如像iOSwebview,或者Safari等浏览器中都有一个特点,滚动时候是不执行JS,如果使用了

1.3K12

BOM概述

-- 正常情况下,我们script应该写在body末尾,写在这个部分是无法正常使用 --> // 这时就需要采用页面加载事件来等待页面加载完成再去加载...,我们先来了解一下回调函数: 回调函数callback 回调函数常常是指其他内容完成之后,一定条件下再重新调用该函数 例如我们之前讲到click事件函数,我们点击某对象才会触发;也比如我们下面即将讲到定时器...,一定时间之后才运行函数,被称为回到函数 Timeout定时器 Timeout分为创建和停止: //创建方法: window.setTimeout(调用函数,[延迟毫秒数]) //停止方法: window.clearTimeout...(timeout ID) setTimeout讲解: setTimeout()用来设置一个定时器 该定时器定时器到期执行调用函数 这个调用函数可以直接写函数,可以写函数名两种形式调用 延迟默认毫秒数为...JavaScript执行机制前,我们需要先了解JavaScript基本信息: JavaScript是单线程,同一时间只能做一件事 因为我们JavaScript是为了操作DOMBOM,我们进行操作时不可能同时创建和删除

1.1K10

JavaScript笔记(18)之BOM

DOMBOM区别 BOM比DOM更大,它包含DOM window对象是浏览器顶级对象,它具有双重角色 它是JS访问浏览器窗口一个接口 它是一个全局对象.定义全局作用域中变量,函数都会变成...window对象属性方法 调用时候可以省略window,前面学习对话框都属于window对象方法,如alert(),prompt()等....所以我们这样写,程序就能照常运行了....:定时器 setTimeout( ) setInterval( ) interval是间隔意思 setTimeout( )定时器 (写时候window可以省略) window.setTimeout...(调用函数,[延迟毫秒数]) setTimeout()方法用于设置一个定时器,该定时器定时器到期执行调用函数 我们试着让程序2秒弹出警示框: 这个延时时间单位是毫秒,但是也可以省略

80010

JavaScript——异步进阶

event loop,也叫事件循环/事件轮询,JS是单线程运行,从前到,一行一行执行,如果某一行执行报错,则停止下面的代码执行,先把同步代码执行完,再执行异步,异步要基于回调来实现,event loop...,setTimeout由浏览器定义,不是ES6内容;将定时器放到Web APIs中,到时间将回调函数放到回调函数队列中执行完了setTimeout, 清空调用栈console.log("Bye")进入调用栈...,不会触发thencatchresolved状态,会触发后续then回调函数rejected状态,会触发后续catch回调函数reslove只会触发then回调,不会触发catchreject只会触发...catch回调,不会触发thenPromisethencatch如何影响状态变化then正常返回resolved,里面有报错则返回rejectedcatch正常返回resolved,里面有报错则返回...宏任务setTimeoutsetInterval, Ajax, DOM事件;微任务Promise async/await微任务执行时机比宏任务要早我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖

19810

阿里前端常见面试题总结

ie8/9/10、chrome浏览器,会先弹出”2”再弹出“1”,这就是事件冒泡:事件从最底层节点向上冒泡传播。...函数节流是指规定一个单位时间,在这个单位时间内,只能有一次触发事件回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。...模拟 setTimeout描述:使用setInterval模拟实现setTimeout功能。...思路:setTimeout特性是指定时间内只执行一次,我们只要在setInterval内部执行 callback 之后,把定时器关掉即可。...数据以函数返回值形式定义,这样当我们每次复用组件时候,就会返回一个新data,也就是说每个组件都有自己私有数据空间,它们各自维护自己数据,不会干扰其他组件正常运行

98610
领券