我在这里有两个代码块:
区块1:
setTimeout(function(){
func1();
setTimeout(function(){
func2();
},500);
},500);
区块2:
setTimeout(function(){
func1();
},500);
setTimeout(function(){
func2();
},1000);
这两个块有什么区别?(不仅是结果,而且还有执行过程)
只有细微的差异。总体来说,您通常不会注意到任何差异。
在第一个代码块中,第二个计时器在func1
运行后启动,因此计时取决于运行所需的时间。如果您这样编写代码块1,则代码块的行为会更加相似:
setTimeout(function(){
setTimeout(function(){
func2();
},500);
func1();
},500);
但是,时间安排上仍然会稍有不同。如果在触发计时器时浏览器正忙于运行某些代码,则回调的执行将被延迟,直到该代码完成为止。第一个计时器的任何延迟都会影响第二个计时器的启动时间。
另一个区别是您是否要停止计时器。在第1块中,第二个计时器取决于第一个计时器,因此您无法独立停止它们。停止第一个计时器也会停止第二个计时器,并且只有第一个计时器完成后才能停止第二个计时器。
使用块2,您可以随时独立停止任一计时器。该setTimeout
方法返回一个句柄,如果要停止它,则使用该句柄:
var handle1 = setTimeout(function(){
func1();
},500);
var handle2 = setTimeout(function(){
func2();
},1000);
然后,您可以使用clearTimeout(handle1)
和clearTimeout(handle2)
停止任一计时器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句