主页 > 前端 > javascript >
来源:未知 时间:2018-03-15 13:50 作者:小飞侠 阅读:次
[导读] setTimeout( ) 是属于 window 的 method, 但我们都是略去 window 这顶层容器名称, 这是用来设定一个时间, 时间到了, 就会执行一个指定的 method,下面这篇文章主要给大家介绍了关于setTimeout时间设...
前言 本文主要给大家介绍了关于setTimeout时间设置为0的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 1、开胃菜,setTimeout为何物 首先看一下w3school上面对于setTimeout的解释
很简单, setTimeout(function(){ console.log('我是setTimeout'); }, 1000); 正常情况下,我是setTimeout 这句话并不会马上输出而是等1000毫秒以后会在浏览器的控制台输出。 2、主菜,js是单线程的 OK,看一个例子,这个例子的输出结果是什么? setTimeout(function(){ console.log(1); }, 0); console.log(2); console.log(3); 出乎一些人的意料,得到的结果竟然是2、3、1。这似乎不按套路出牌啊,明明是等待了0毫秒也就是不等待直接输出啊,为啥1却在最后输出了呢? 这就需要搞清楚一个很重要的概念:js是单线程的,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。 其实很好理解,就像大家去超市买东西一样,所有买东西的人都需要在收银台排队结账,正常情况下每个收银台同一时间只能为一位顾客结账,这位顾客结账完成才能为下一位顾客服务。 而浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,GUI渲染线程,浏览器事件触发线程。
其实,当js代码执行遇到
HTML5标准规定了 需要注意的是, 3、甜品,setTimeout的妙用 其实setTimeout是有一些妙用的,这里简单列举几个。 函数去抖 让一个函数在一定间隔内没有被调用时,才开始执行被调用方法。比如当你在使用 google 搜索内容的时候,有些关键词输入到一半,谷歌会展示一个可选列表,根据你当前输入的内容作出的一个猜测联想。需要监听文字改变,每一次改变都会调用一次回调函数,现在需要的一种实现是在用户停止键盘事件一段时间后,去发送一个请求。 var debounce = function(method, context) { clearTimeout(method.tId); method.tId = setTimeout(function(){ method.call(context); },100); } 轮训任务 js中可以使用setInterval开启轮询,但是这种存在一个问题就是执行间隔往往就不是你希望的间隔时间。 比如有个轮询任务间隔是100ms,但是执行方法的时间需要450ms,那么在200ms、300ms、400ms本来是计划中执行任务的时间,浏览器发现第一个还未执行完,那么就会放弃2、3、4次的任务执行,并且在500ms之后再次执行任务,这样的话,其实再次执行的间隔就只有50ms。使用setTimeout构造轮询能保证每次轮询的间隔。 setTimeout(function () { console.log('我被调用了'); setTimeout(arguments.callee, 100); }, 100); 延迟js引擎的调用 var div = document.createElement('div'); div.innerHTML = '我是一个div'; div.setAttribute('style', 'width:200px; height:200px;background-color:#f00; '); document.body.appendChild(div); setTimeout(function() { console.log('我被调用了'); }, 1000); 虽然setTimeout有一些妙用,但是他确实是在宏观任务队列中新增任务了,所以万万不能滥用啊。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com