JS定时器初步实践
2016-12-08 23:26
183 查看
效果:数值从0到10来回变化
方法1:用一个定时器实现
方法2:用两个定时器实现
----------分割线------------------------
使用定时器需要注意的点:
1. 虽然每次都用clearInterval把timer清掉了,但是每次新的循环还是会使timer的值在原有基础上加1,如要彻底清除可以用timer=null;
2.setTimeout和setInterval都是window对象中的方法,定时器方法会先将回调函数放在一个特殊的队列中,待ECS(执行环境栈)中的函数全部执行完了之后才执行队列中的回调函数。从目前来看会造成几个值得注意的后果:
1)定时器回调函数中的this会默认指向window, 需要注意用bind方法绑定this指向
2)js代码的运行会阻塞DOM树的渲染(只需要在某DOM节点的前面放一段需要几秒钟才能执行完的循环JS代码就能验证这点),但是一旦这段js放在了定时器的回调函数中,则不会再有阻塞效果
3)setTimeout的起始计时时间并不是从我们刷新页面开始计算,而是从执行环境栈中其他任务执行完之后才开始计时
方法1:用一个定时器实现
var a=0,b; function change(){ if(a===0)b=1; if(a===10)b=-1; console.log(a=a+b); } var timer=setInterval(change,200);
方法2:用两个定时器实现
var a=0 var timer1,timer2; function add(){ a++; console.log(a); if(a>=10){ clearInterval(timer1); timer2=setInterval(sub,200); } } function sub(){ a--; console.log(a); if(a<=0){ clearInterval(timer2); timer1=setInterval(add,200); } } timer1=setInterval(add,200);
----------分割线------------------------
使用定时器需要注意的点:
1. 虽然每次都用clearInterval把timer清掉了,但是每次新的循环还是会使timer的值在原有基础上加1,如要彻底清除可以用timer=null;
2.setTimeout和setInterval都是window对象中的方法,定时器方法会先将回调函数放在一个特殊的队列中,待ECS(执行环境栈)中的函数全部执行完了之后才执行队列中的回调函数。从目前来看会造成几个值得注意的后果:
1)定时器回调函数中的this会默认指向window, 需要注意用bind方法绑定this指向
2)js代码的运行会阻塞DOM树的渲染(只需要在某DOM节点的前面放一段需要几秒钟才能执行完的循环JS代码就能验证这点),但是一旦这段js放在了定时器的回调函数中,则不会再有阻塞效果
3)setTimeout的起始计时时间并不是从我们刷新页面开始计算,而是从执行环境栈中其他任务执行完之后才开始计时
相关文章推荐
- FLASK初步实践
- 采用[ICONIX] 方法实践BLOG设计之五 [初步设计复核]
- Spark初步---spark-shell下RDD的wordcount实践
- struts2初步搭建实践一
- 提高第15课时,实践,简单银行系统的初步框架(加强版)v2.0
- Shell的条件表达式知识初步介绍实践
- 应用TPM作linux可信起动的初步实践
- 版本控制的分支策略及初步实践
- 从无到有,WebService Apache Axis2初步实践
- Redis进阶实践之七Redis和Lua初步整合使用
- Rsync初步实践
- 《C语言及程序设计初步》_1.11算术运算符与算术表达式_实践9——分离各位数
- Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
- 切词算法初步实践(java)
- GitHub入门与实践(三)——初步体验Git与GitHub的联动
- Deep Learning in Customer Churn Prediction (三) (初步特征构建实践及基本模型试验)
- 软件工程实践----初步接触软件工程的总结
- 《C语言及程序设计初步》_1.11算术运算符与算术表达式_实践10——分离整数和小数部分
- Nginx源码分析与实践---Nginx的初步配置
- React native for Android 初步实践[原理剖析]