Masa pelaksanaan melaksanakan kod ini pada penyemak imbas Windows adalah sangat berbeza daripada melaksanakan kod ini pada Mac.
Kaedah ini melakukan output setiap 1ms. Mengapa terdapat perbezaan antara tingkap dan mac? Ia jelas lebih perlahan pada mac.
var time =0;
var interval = setInterval(function(){
time++;
console.log("time="+time);
if(time===100){
clearInterval(interval);
}
},1);
Ya, banyak kali settimeout dan setinterval tidak begitu tepat Sebabnya ialah js adalah single-threaded
Fungsi panggil balik setInterval tidak dilaksanakan serta-merta selepas tamat masa, tetapi akan dilaksanakan selepas sumber pengkomputeran sistem melahu
Masa pencetus seterusnya tidak akan bermula sehingga fungsi panggil balik setInterval dilaksanakan
Jadi jika pengiraan yang dilakukan dalam setInterval terlalu memakan masa
Atau jika terdapat tugasan lain yang memakan masa yang sedang dilaksanakan, masa setInterval akan menjadi semakin tidak tepat dan kelewatan akan menjadi teruk.
Biar saya berikan contoh mudah:
Teka siapa yang akan melaksanakannya dahulu? Walaupun kita kata
js
是单线程的,但是浏览器是可以控制多线程的,当我们设置setTimeOut
的时候,其实浏览器会调用一个线程,而这个线程就叫做Event Loop
,让这个线程帮我们去执行,而主线程则继续执行下面的代码,这也就是我们经常会说到的异步模式
.