js的计时器导致同时执行函数的问题?

rayliao
  • 3.1k
setTimeout(function(){some()}, 5000);
setTimeout(function(){some()}, 5000);

function some() {
    //TO DO
}

两个setTimeout或者setInterval,时间间隔一致,都执行一个方法,会同时执行吗? 方法里面的变量会被干扰吗?

回复
阅读 4.7k
6 个回答

不会同时执行,因为JS是单线程的,同一时间只可能有一个函数在运行。

不会,所有的的setTimeout都会当作延时事件放到队列里,当同步代码执行完毕后,会依次执行延时事件,并不会完全依照设定的时间间隔来执行,也就是说如果到了设定的时间了,但是队列中还有其他代码正在执行,那么继续延后。

正是由于单线程,对于setTimeout( )会执行2次,对于setInterval( )来说,需要将它显式的赋值给一个变量,这个变量保存这这个定时器的唯一ID,以便于后面使用clearInterval( 变量 ) 方式清除定时器。而对于需要定时间隔调用来说setTimeout( )比setInterval( )要好,因为前者至少保证不会有某个定数调用被取消。你可以查看一下这两个函数的功能,深入理解一下~
纯手打,如果有误,请指正。

1)不会同时执行
2)执行的时间点为setTimeout执行时间点+设置的timeout时间,后setTimeout出现的顺序无关
3)执行的时间点是不精确的,如果在设置的超时时间到达后,之前还有任务没有执行完毕,那么函数就不会执行;在前面的任务完成后,才执行。这是JS的单线程执行机制的结果

1.从宏观上来讲,会在设置的时间内 也就是那一毫秒内同时执行
2.但是如果说到到微观上,js是单线程的,也就是不会同时执行两个函数,底层可以理解为,第一个setTimeout 到第二个setTimeout 是有间距的也就是js中的同步执行。而seeTimeout 中的函数才是异步,他们的起始点是不一样;

不会同时执行,JS是单线程的,意味着如果到时间后如果事件队列中没有正在执行和将要执行的事件,你的代码会立刻执行,否则加入到事件队列中顺序执行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏