JS定時器的工作原理是通過設(shè)置一個計時器,來定時執(zhí)行特定的代碼。JS中有兩種定時器:setTimeout和setInterval。
首先,通過調(diào)用setTimeout函數(shù),傳入一個回調(diào)函數(shù)和一個時間間隔參數(shù)(以毫秒為單位)。
JS引擎會將該定時器放入事件隊列中,并在設(shè)定的時間間隔之后,將回調(diào)函數(shù)移到執(zhí)行隊列中,準(zhǔn)備執(zhí)行。
一旦執(zhí)行隊列為空,JS引擎會從執(zhí)行隊列中取出第一個回調(diào)函數(shù)執(zhí)行。
類似于setTimeout,通過調(diào)用setInterval函數(shù),傳入一個回調(diào)函數(shù)和一個時間間隔參數(shù)。
JS引擎會將該定時器放入事件隊列中,并在設(shè)定的時間間隔之后,將回調(diào)函數(shù)移到執(zhí)行隊列中,準(zhǔn)備執(zhí)行。
不同于setTimeout,setInterval會在每次回調(diào)函數(shù)執(zhí)行完之后,立即將回調(diào)函數(shù)重新放入執(zhí)行隊列中,形成一個循環(huán)執(zhí)行的效果。
需要注意的是,JS是單線程執(zhí)行的,因此定時器并不是精確的定時器,它們的執(zhí)行時間可能受到其他代碼的影響,導(dǎo)致實際執(zhí)行時間有所偏差。