java中settimeout作用_关于setTimeout的妙用
定义
在指定的延迟时间之后调用一个函数或执行一个代码片段
这个是setTimeout最主要的功能,但也是很坑的地方,首先javascript其实是运行在单线程的环境下,意味者定时器会在未来的某个时间支持,但是具体的执行的时间并不能够很准确的运行,容易受到其它时间的影响,比如DOM的计算、事件的执行、各种函数的执行和运算。但是我们可以利用延迟执行的一些特性来达到我们想要的功能。、
window.setTimeout(callbask, delay, [param1, param2, ...])
函数节流
程序运行过程中对某个函数调用次数很多导致界面不断回流或者重排,这时候就需要对这个函数进行节流,比如监听touchmove、scroll事件等,可以限定函数在单位时间内只执行一次
var throttle = function(method, context) {
clearTimeout(method.tId);
method.tId= setTimeout(function(){
method.call(context);
},100);
}
控制执行
点击事件是会产生冒泡,执行的顺序是当前点击元素->父元素->...->document,一直往上执行到document。如果对当前元素的点击事件处理加上setTimeout的话,那么执行顺序就会改变为父元素->...->document->当前元素。这样就可以控制冒泡事件的执行顺序
var parent = document.getElementById("parent");var child = document.getElementById("child");
document.body.addEventListener("click", function(e) {
console.log("body");
},false);
parent.addEventListener("click", function(e) {
console.log("parent");
},false);
child.addEventListener("click", function(e) {
setTimeout(function() {
console.log("child");
},0);
},false);/**parent
*body
*child*/
构建一个轮询任务
javacsript中已经有一个开启轮询的方法,就是setInterval,但是这种存在一个问题就是执行间隔往往就不是你希望的间隔时间
比如有个轮询任务间隔是100ms,但是执行方法的时间需要450ms,那么在200ms、300ms、400ms本来是计划中执行任务的时间,浏览器发现第一个还未执行完,那么就会放弃2、3、4次的任务执行,并且在500ms之后再次执行任务,这样的话,其实再次执行的间隔就只有50ms。使用setTimeout构造轮询能保证每次轮询的间隔
setTimeout(function(){
alert(1);
setTimeout(arguments.callee,100);
},100)
分块处理耗时计算
浏览器给javascript的运行规定了内存和时间,假如javascript运行的时间超过了规定时间,那么浏览器就会''报错''
for(var i = 0; i < arr.length; i++){//耗时很久的嵌套循环或者运算
doSomeing(arr[i]);
}
假如在循环中做的处理的逻辑不是同步的话,那么可以把逻辑''分片''执行
sertTimeout(function(){var item =arr.shift();
dosomeing(item);if(arr.length <0){
setTimeout(arguments.callee,100);
}
},100);
延迟JS引擎的调用
GUI渲染线程和JS引擎的执行之间是互斥,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎执行完毕时立即被执行。这样的结果会导致新内容很晚才能渲染完成,很多时候我们需要让界面先渲染完成之后在去调用JS引擎来执行,那么可以使用setTimeout来延迟JS引擎的调用
var div = document.createElement('div');
div.setAttribute('style', 'background-color:#233; width:100px; height:100px');
document.body.appendChild(div);
setTimeout(function() {
alert(1);
},100);
java中settimeout作用_关于setTimeout的妙用相关推荐
- java中 jacob作用_【JAVA】JACOB使用简介
它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库.它可运行在x86和支持32位和64位Java虚拟机 X64的环境. 测试源码包: 密码: ej9u JAC ...
- 红黑树在java中的作用_带你真正理解Java数据结构中的红黑树
红黑树是平衡的二叉树,它不是一个完美的平衡二叉树,但是在动态插入过程中平衡二叉搜索树的代价相对较高,所以红黑树就此出现,下面就让爱站技术频道小编带你一起进入下文了解一下吧! 一.红黑树所处数据结构的位 ...
- java中person作用_以下Java程序中Person(){};是什么意思,有什么作用?
匿名用户 1级 2013-08-20 回答 Person()方法是用来创建实例的构造方法,例如你要创建一个Person类的实例就需要new Person(),这里的Person()就是Person类的 ...
- 浅谈计算机教学论文,浅谈计算机在教学中的作用_优秀论文
<浅谈计算机在教学中的作用_优秀论文>由会员分享,可在线阅读,更多相关<浅谈计算机在教学中的作用_优秀论文(5页珍藏版)>请在人人文库网上搜索. 1.浅谈计算机在教学中的作用论 ...
- Java中接口作用的理解
关于Java中接口作用的深入理解.这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了.要把接口视作一种共同规范. / 2019/3/1 补充 : 接口的存在也是为了弥补类无法多继承的缺点,假设一 ...
- java 克隆的作用_关于java中克隆的学习(一)
java中的克隆,就是要复制对象,但为什么要用克隆呢?我们直接把对象赋值给其它同类型的实例不就行了吗?这就要从java的值传递和引用传递说起了. package dcr.study.test.poin ...
- java虚引用作用_深入理解Java中的引用(二)——强软弱虚引用
深入理解Java中的引用(二)--强软弱虚引用 在上一篇文章中介绍了Java的Reference类,本篇文章介绍他的四个子类:强引用.软引用.弱引用.虚引用. 强引用(StrongReference) ...
- java 线程组作用_浅析Java中线程组(ThreadGroup类)
一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...
- java 中阿拉伯语_电子游戏中的阿拉伯代表
java 中阿拉伯语 表示 (REPRESENTATION) Growing up in the Middle East, video games played a significant role ...
最新文章
- Android NDK 学习汇总
- spring注解开发:容器中注册组件方式
- css文件如何设置scss,Webpack - 如何将scss编译成单独的css文件?
- 了解与防御XSS攻击
- 尽管速度如此之慢,为什么Python如此受欢迎?
- python3 x默认使用的编码_Python3编码问题(Python2请忽略)
- 自己写的主从查询代码
- 微软在Windows 8之后将放弃Windows品牌
- 迁移oracle数据库,简简单单的Oracle数据库迁移方法
- ZeroMQ文档白嫖:一文述完ZeroMQ的套接字选项
- CCF计算机职业资格认证系列一CCF软件能力认证
- opencv部署onnx,并对jpg图片进行批量检测生成xml重要信息
- 单像空间后方交会模型
- Face Swapping: Automatically Replacing Faces in Photographs论文阅读
- Tolua for Unity3d 编译字节码
- 一起来玩U3D之基础物理引擎
- 2018.8.盛夏,
- 程序员幽默搞笑文章,很有意思!大家一起放松一下!!
- 开源网校系统如何搭建
- 索引重建的必要性与影响 (文档 ID 1525787.1)