在windows的浏览器上执行这段代码和在mac上执行这段代码的执行时间差异很大。此方法是没1ms执行一次输出。为什么windows和mac会有差异呢?mac上明显更慢。
var time =0; var interval = setInterval(function(){ time++; console.log("time="+time); if(time===100){ clearInterval(interval); } },1);
闭关修行中......
是的,很多时候settimeout和setinterval都不是特别的准的,原因就是js是单线程的
setInterval的回调函数并不是到时后立即执行,而是等系统计算资源空闲下来后才会执行
而下一次触发时间则是在setInterval回调函数执行完毕之后才开始计时
所以如果setInterval内执行的计算过于耗时
或者有其他耗时任务在执行,setInterval的计时会越来越不准,延迟很厉害.
给你举一个简单的例子:
<script type="text/javascript"> setTimeout(function(){ console.log('a'); } , 0); console.log('b'); </script>
你猜谁先执行?虽然我们说js是单线程的,但是浏览器是可以控制多线程的,当我们设置setTimeOut的时候,其实浏览器会调用一个线程,而这个线程就叫做Event Loop,让这个线程帮我们去执行,而主线程则继续执行下面的代码,这也就是我们经常会说到的异步模式。
js
setTimeOut
Event Loop
异步模式
是的,很多时候settimeout和setinterval都不是特别的准的,原因就是js是单线程的
setInterval的回调函数并不是到时后立即执行,而是等系统计算资源空闲下来后才会执行
而下一次触发时间则是在setInterval回调函数执行完毕之后才开始计时
所以如果setInterval内执行的计算过于耗时
或者有其他耗时任务在执行,setInterval的计时会越来越不准,延迟很厉害.
给你举一个简单的例子:
你猜谁先执行?虽然我们说
js
是单线程的,但是浏览器是可以控制多线程的,当我们设置setTimeOut
的时候,其实浏览器会调用一个线程,而这个线程就叫做Event Loop
,让这个线程帮我们去执行,而主线程则继续执行下面的代码,这也就是我们经常会说到的异步模式
。