SetTimeout()多次运行函数后越来越快的问题

问题原因很简单,但是由于代码逻辑问题,一直没有考虑到;

网上有个帖子说的很明白:原帖入口

假如你在0时刻点击了一下按钮,那么500ms时数字会跳一下,1000ms会再跳一下,依次类推,1500,2000,2500.....的时候都会跳一下,时间间隔始终是500ms,但是,假如你在300ms的时候又点击了一下按钮,那么800ms的时候数字就会跳一下,1300,1800,2300.....的时侯都会跳一下,那么现在看0到2000ms之间,300,500,800,1000,1300,1500,1800,2000时刻时数字都会跳一下,数字变化的时间间隔自然会变小,同理,你点击的次数越多,时间间隔就会越小。

你每点击一次都会创建一个新的定时器,但是之前的定时器不会自己取消。

你要在创建新的定时器前用clearTimeout()取消之前的定时器。

解决:创建新的定时器前用clearTimeout()取消之前的定时器。

原文地址:https://www.cnblogs.com/Dreamice/p/9407252.html

时间: 2024-08-30 18:18:58

SetTimeout()多次运行函数后越来越快的问题的相关文章

setTimeout,setInterval运行原理

function a() { setTimeout(function(){alert(1)},0); alert(2); } a(); 和其他的编程语言一样,Javascript中的函数调用也是通过堆栈实现的.在执行函数a的时候,a先入栈,如果不给alert(1)加setTimeout,那么alert(1)第2个入栈,最后是alert(2).但现在给alert(1)加上setTimeout后,alert(1)就被加入到了一个新的堆栈中等待,并"尽可能快"的执行.这个尽可能快就是指在a的

从setTimeout谈JavaScript运行机制

前言 最近在看些JavaScript异步的东西,但是由于时间有限,才刚看了个头,不得不中途停止.为了方便日后查阅以备重拾,遂记录一点体会,如果能使得他人有所收获,那更是极好的.其实本文与异步并没有太大关系. 从setTimeout说起 众所周知,JavaScript是单线程的编程,什么是单线程,就是说同一时间JavaScript只能执行一段代码,如果这段代码要执行很长时间,那么之后的代码只能尽情地等待它执行完才能有机会执行,不像人一样,人是多线程的,所以你可以一边观看某岛国动作片,一边尽情挥洒汗

php中header函数后是否应该有exit

通常有一下三种:  代码如下 复制代码 Location: xxxx:yyyy/zzzz Content-Type: xxxx/yyyy Status: nnn xxxxxx 常用实例 1.实现重定向(状态码302)  代码如下 复制代码 <?phpheader(”Location: http://www.111cn.net”);exit;?> 例子  代码如下 复制代码 <?phpheader("Location:http://www.111cn.net/");//

Visual Studio - 让程序运行完后不直接关闭

Issue: 控制台一闪而过,看不到输出结果. 如何保持控制台窗口,让程序运行完后不直接关闭? Solve 1:(推荐) 建议设置项目属性. 1)右键项目 >> 属性(Properties),打开项目的属性页 2)项目的属性页下,找到: 配置属性(Configuration Properties) > 链接器(Linker) > 系统(System) > SubSystem, 并将SubSystem右侧下拉框中,对应的值改为:(如下图所示) 控制台(/ SUBSYSTEM:C

scarpy-redis运行爬虫后,redis数据里只有dupefilter,而没有requests

scarpy-redis运行爬虫后 在redis中并没有保存requests,只保存了dupefilter,ctrl+c停止后,才会在redis中保存requests 原因是因为 生成next_url太慢,即往redis push之后,立马被pop了,才导致redis 没有 requests的序列化,然后导致其他scrapy实例无法读取request继而无法同时进行数据抓取 解决:生成next_url的时候快点,从列表展示页抓,生成比较快 原文地址:https://www.cnblogs.com

const 放在函数后

const 放在函数后表示这个函数是常成员函数, 常成员函数是不能改变成员变量值的函数.const 限定符,它把一个对象转换成一个常量.举例:为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明:class Point{public:int GetX() const;int GetY() const;void SetPt (int, int);void OffsetPt (int, int);private:int xVal, yVal;};const成员函数

const在变量前后,函数后的含义(C++)

int me: const int * p1=&me://p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向 int * const  p2=&me://p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向. const int *const  p3=&me://p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向 const 放在函数后的函数叫常成员函数.常成员函数可以理解为是一个"只读"函数,它既不能更改数据成员的

运行startx后Ubuntu密码正确进不去的问题

今天在命令行里敲了 startx ,然后系统重启,输入密码后,跳转到一下界面,之后又返回到登陆界面.一直这样循环输入密码,进不去系统. 然后不得不用手机在网上查找解决办法. 解决步骤如下: 1,Ctrl+Alt+F3 切换到控制台登陆 2,cd~ 3,rm -rf .Xaut* 4, Ctrl+Alt+F7回到登陆界面,输入密码正常登陆. 进不去的原因是什么? 在tty执行startx会生成的一个文件,ubuntu的登陆器是lightdm,这个登陆器发现你家目录里有这个文件就会死循环,让你无限输

运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory -------------------------------------------------------------------------------------------------------------------------------------