javascript - Dari tempoh masa apakah masa tunda setTimeout bermula?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-07-05 11:03:30
0
3
1299

setTimeout(fn,200), adakah masa yang dinyatakan di sini bermakna ia dikira sebaik sahaja program mula berjalan? Atau patutkah kita menunggu sehingga tugas utas utama selesai dan memanggil semula senarai tugas tak segerak sebelum memulakan pengiraan?

女神的闺蜜爱上我
女神的闺蜜爱上我

membalas semua(3)
世界只因有你

Ini agak rumit untuk diterangkan
Pertama sekali, anda mesti faham bahawa Javascript adalah single-threading bermakna semua tugasan perlu beratur. Kemudian semua tugas akan dibahagikan kepada dua kategori: tugas segerak dan tugas tak segerak! Tugasan segerak: Tugasan yang dilaksanakan pada utas utama hanya akan melaksanakan tugasan seterusnya selepas tugasan sebelumnya selesai! Tugasan tak segerak: Tugasan yang tidak memasuki utas utama tetapi memasuki "baris gilir tugasan".

Untuk setTimeout(fn,200),当到200ms时,fn会被放进“任务队列”,而“任务队列”必须要等到主线程已有的代码执行完才会执行fn,所以当程序执行到setTimeout(fn,200)这一行时,时间就开始计算,但是fnmasa pelaksanaan sebenar tidak semestinya selepas 200ms, mungkin selepas masa yang lebih lama (bergantung pada masa pelaksanaan kod penyegerakan pada utas utama).

学霸

Secara ringkasnyasetTimeout(fn,200)需要等到当前函数调用栈(主进程上的同步任务)清空之后才开始执行,会在下一轮事件循环(主线程从"任务队列"中读取事件)开始时执行,setTimeoutHanya acara yang dimasukkan ke dalam "barisan tugasan." Masa yang ditetapkan di sini ialah selang relatif kepada masa pada permulaan pusingan acara seterusnya.

巴扎黑

Masa bermula apabila setTimeout(fn,200) dipanggil.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan