为什么要在setInterval之前js清除定时器器

如题,由于做的项目用到了定时器,但是不知道是定时器没有起作用还是其他的什么原因.

很多情况下用定时器都没有错误,但是有时候感觉定时器没有执行一样,

如果用alert来调试每次都能正常调用

现在在这里,请高手帮下忙,解释下setInterval在什么时候会被销毁,还有就是他的执行原理是什么?


有时候感觉定时器没有执行一样?

有时候感觉定时器没有执行一样?

非常感谢提醒,代码不是我写的,但是错误由我来调试,没有办法,出现问题很难定位

alert会阻塞代码执行吧,感觉不如向网页上输出数据。

alert会阻塞代码执行吧,感觉不如向网页上输出数据。

介绍下有什么好的调试器,我主要搞swing到web这端的,js用的很少

有时候感觉定时器没有执行一样?

firefox的错误控制台就可以显示哪出错了。

firefox的错误控制台就可以显示哪出错了。
匿名用户不能发表回复!
各位同学在用 vue react 技术栈做单页面应用的时候,因为是单页面所以在跳转“页面“的时候,不会根据页面的销毁而删除,大家需要手动清除定时器,但是各个技术栈都有相应的钩子函数 能够让同学们在销毁页面的时候清除定时器和绑定的事件,但是假如我们没有用vue react等库 但是使用了单页面的思想,没有了钩子函数我们怎么办呢,当页面跳转的时候定时器依然存在但是dom元素消失了,剩下的只能是一行行的...
NSTimer受runloop的影响,由于runloop需要处理很多任务,导致NSTimer的精度降低,在日常开发中,如果我们需要对定时器的精度要求很高的话,可以考虑 dispatch_source_t 去实现 。dispatch_source_t 精度很高,系统自动触发,系统级别的源。下面是通过dispatch_source_t 创建 计时器的例子
标准参考教程(alpha)》,by 阮一峰 目录
事件: 一个事件可以分为以下几点: 事件源、事件名、事件的注册、事件的处理。 西点发生火灾事件 事件源是西点 事件名:火灾 事件的注册:西点归大桥站消防武警管理,这个管理是在发生事件前就分配好的。所以是他们来处理。 事件处理:喷水 点击事件: 事件的名字就叫click 获取事件源,点=谁发生了什么事
VUE 很好用,但是对有些方法支持起来有些坑 比如常用的 setInterval 这个方法一般会用来做一个倒计时,比如点击发送验证码后 的倒计时这个对象是在window 下的方法,在与vue配合的时候有些问题需要注意一下第一,为了要停止计时 我们需要把 setInterval 赋值给一个变量 为了之后用 clearInterval()停止计时; 这个变量 不能用 vue 中的

设置定时器,在一段时间之后执行指定的代码,setTimeout与setInterval的区别在于setTimeout函数指定的代码仅执行一次

使用window对象的setTimeout()方法设置暂停。该方法接受两个参数,要执行的代码和在执行它之前要等待的毫秒数(1/1000秒)。第一个参数可以是代码串(与eval()函数的参数相同),也可以是函数指针。例如,下面的代码都在1秒钟后显示一条警告:

setTimeout(sayHelloWorld,1000);调用setTimeout()时,它创建一个数字暂停ID,与操作系统中的进程ID相似。暂停ID本质上是要延迟的进程ID,再调用 setTimeout()后,就不应该再执行它的代码。要取消还未执行的暂停,可调用clearTimeout()方法,并将暂停ID传递给它:

你也许会问:“为什么要定义暂停,又在执行它之前将其取消呢?”请 考虑在大多数应用程序中可见的工具提示。当把鼠标移动到一个按钮上时,停留一会,等待出 现黄色的文本框,提示该按钮的功能。如果只是短暂的把鼠标该按钮上,然后很快将其移动到另一个按钮上,那么第一个按钮的工具提示就不会显示,这就是要在执 行暂停代码前取消它的原因。因为你在执行代码前只想等待指定的时间量。如果用户的操作产生了不同的结果,则要取消该暂停

设置时间间隔,时间间隔与暂停的运行方式相似,只是它无限此地每隔指定的时间段就重复执行一次指定的代码。可调用setInterval()方法设置时间间隔,它的参数与setTimeout()相同,是要执行的代码和每次执行之间等待的毫秒数

setInterval()方法也创建时间间隔ID,以标识要执行的代码。clearInterval()方法可 用这个ID阻止再次执行该代码。显然。这一点在使用时间间隔时更重要,因为如果不取消时间间隔,就会一直执行它,直到页面被卸载为止。下面是时间间隔用法的一个常见示例:

iIntervalId = setInterval(incNum, 500);在这段代码中,每隔500毫秒就对数字iNum进行一次增量运算,直到它达到最大值(iMax), 此时该时间间隔将被清除。也可以用暂停实现该操作,这样即不必跟踪时间间隔的ID,代码如下:

下面这个例子将每隔 50 毫秒调用 clock() 函数。您也可以使用一个按钮来停止这个 clock:

/*更新商户姓名、佣金额、资金额*/

这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。

实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。

不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。

虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通过创建一个函数循环重复调用setTimeout,以实现重复的操作:


一旦调用了这个函数,那么就会每隔5秒钟就显示一次时间。如果使用setInterval,则相应的代码如下所示:

这两种方法可能看起来非常像,而且显示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。

如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。

两个计时函数中的第一个参数是一段代码的字符串,其实该参数也可以是一个函数指针,不过Mac下的IE 5对此不支持。

如果用函数指针作为setTimeout和setInterval函数的第二个参数,那么它们就可以去执行一个在别处定义的函数了:

另外,匿名函数还可以声明为内联函数:

如果对计时函数不加以处理,那么setInterval将会持续执行相同的代码,一直到浏览器窗口关闭,或者用户转到了另外一个页面为止。不过还是有办法可以终止setTimeout和setInterval函数的执行。

当setInterval调用执行完毕时,它将返回一个timer ID,将来便可以利用该值对计时器进行访问,如果将该ID传递给clearInterval,便可以终止那段被调用的过程代码的执行了,具体实现如下:

只要点击了stopGoalLink,不管是什么时候点击,intervalProcess都会被取消掉,以后都不会再继续反复执行intervalProcess。如果在超时时间段内就取消setTimeout,那么这种终止效果也可以在setTimeout身上实现,具体实现如下:

我要回帖

更多关于 js清除定时器 的文章

 

随机推荐