Middle
setTimeout функциясынын нөлүк кечиктирүү менен колдонулушунун өзгөчө учурун айтып бериңиз.
sobes.tech AI
AIден жооп
setTimeout(callback, 0) макротаск кезегине (macrotask queue) callback-ти коюу. callback ичиндеги код азыркы чакта толук бош стек болсо жана кийинки макротаск цикл ишке кирсе гана ишке ашат.
Көп колдонулган сценарийлер:
- Кийинчерээк рендерден кийин иштетүү: Браузер DOMдогу азыркы өзгөртүүлөрдү иштеткенден кийин кодду иштетүүгө мүмкүндүк берет.
// DOM элементин өзгөртүү element.textContent = 'Жаңы текст'; // Рендерден кийин ишке ашуучу, DOMден көз каранды болгон аракет setTimeout(() => { console.log('DOM жаңыланды, жаңы абал менен иштөө мүмкүн'); }, 0); - Узун операцияларды бөлүү: Туруктуу блоктоону алдын алуу үчүн, узун эсептөөлөрдү кичинекей бөлүктөргө бөлүп, аларды жеке микрозадачаларда (macrotasks) аткарууга жардам берет.
function processLargeData(data) { let i = 0; function processChunk() { const chunkSize = 1000; const end = Math.min(i + chunkSize, data.length); // Массивдин бөлүгүн иштетүү for (let j = i; j < end; j++) { // data[j] менен иштөө } i = end; if (i < data.length) { // кийинки бөлүктү кечиктирүү setTimeout(processChunk, 0); } else { console.log('Иштетүү аяктады'); } } processChunk(); } - Негизги скрипт аяктагандан кийин иштетүү: Туура жана толук скрипт ишке киргизилгенден кийин жана бардык синхрондуу операциялар иштетилгенден кийин белгилүү бир код ишке ашарын кепилдейт.
console.log('Скрипттин башталышы'); setTimeout(() => { console.log('Негизги скрипттен кийин иштейт'); }, 0); console.log('Скрипттин аягы'); // Натыйжа: // Скрипттин башталышы // Скрипттин аягы // Негизги скрипттен кийин иштейт
Маанилүү: нөлдүк кечиктирүү мүнөттөө мүнөттөө эмес. Ишке ашуу убактысы event loop жүктөмүнө жана кезектеги башка тапшырмаларга (айрыкча микрозадачаларга) көз каранды.