Middle
გააზიარეთ setTimeout ფუნქციის გამოყენების განსაკუთრებული შემთხვევა ნულოვანი დაგვიანებით.
sobes.tech AI
პასუხი AI-სგან
setTimeout(callback, 0) მაკროადამიანის რიგში (macrotask queue) აყენებს callback-ს. callback-ის შიგნით კოდი შესრულდება შემდეგ, როდესაც მიმდინარე ზარის სტეკი იქნება ცარიელი და შემდეგი მაკროადამიანის ციკლი დაიწყება event loop-ის მიერ.
ძირითადი გამოყენების შემთხვევები:
- გადადებული შესრულება რენდერინგის შემდეგ: საშუალებას აძლევს კოდს შესრულდეს შემდეგ, როდესაც ბრაუზერი დამუშავებს 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-ის დატვირთვაზე და სხვა რიგში მდგომ ამოცანებზე (განსაკუთრებით მიკროადამიანებზე).