Call Stack nima?
JavaScript'da Call Stack qanday ishlashi, LIFO tartibi, stack overflow xatosi va Event Loop bilan bog'liqligini sodda misollar bilan tushuning.
14-dars
Call Stack nima?
Call Stack - JavaScript'da function'lar qanday tartibda ishlayotganini nazorat qiladigan stack (LIFO) struktura.
LIFO = Last In, First Out
Ya'ni: oxirgi kirgan - birinchi chiqadi.
1) Oddiy tasavvur
Stol ustiga kitoblarni ustma-ust qo'yayotganingizni tasavvur qiling:
- Oxirgi qo'ygan kitobingizni birinchi olasiz
- Pastdagi kitobga yetish uchun yuqoridagilarini avval olasiz
Function chaqiriqlari ham xuddi shu tartibda ishlaydi.
2) Call Stack qanday ishlaydi?
Har safar function chaqirilsa:
- U stack'ga qo'shiladi (
push) - Ishini tugatgach stack'dan chiqadi (
pop)
Misol:
function one() {
console.log("one");
}
function two() {
one();
console.log("two");
}
two();
Qadam-baqadam:
two() chaqirildi:
[ two ]
one() chaqirildi:
[ two, one ]
one() tugadi:
[ two ]
two() tugadi:
[ ]
Natija:
one
two
3) Visual ko'rinish
CALL STACK
Start:
[]
two() called:
[ two ]
one() called:
[ two, one ]
one() finished:
[ two ]
two() finished:
[]
4) Stack Overflow nima?
Stack Overflow - stack haddan tashqari to'lib ketgan holat.
Bu odatda:
- Function o'zini (yoki bir-birini) cheksiz chaqirganda
- Chaqiriqlar stack'dan chiqishga ulgurmasdan ko'payib ketganda
Misol:
function test() {
test();
}
test();
Jarayon:
[ test ]
[ test, test ]
[ test, test, test ]
...
Oxiri xato:
RangeError: Maximum call stack size exceeded
5) Real hayot analogiyasi
Kitoblarni stolga cheksiz qo'yaversangiz, bir vaqtda joy tugaydi.
JavaScript'da ham xuddi shunday:
- Chaqiriqlar kirib boradi
- Lekin chiqmaydi
- Oxirida stack sig'imi tugaydi
Natija: Stack Overflow.
6) Sync vs Async (muhim)
console.log("1");
setTimeout(() => {
console.log("2");
}, 0);
console.log("3");
Natija:
1
3
2
Nega?
console.log("1")darhol stack'da bajariladisetTimeoutcallback'i to'g'ridan-to'g'ri stack'ga kirmaydi- U avval
Web APIga ketadi console.log("3")bajariladi- Stack bo'shagach,
Event Loopcallback'ni queue'dan stack'ga o'tkazadi - Shunda
console.log("2")ishlaydi
7) Call Stack + Event Loop uchligi
Quyidagi tushunchalarni birga eslab qoling:
- Call Stack - hozir bajarilayotgan kod
- Web APIs - browser ushlab turadigan asinxron ishlar (
setTimeout, DOM event, fetch va hokazo) - Event Loop - stack bo'sh bo'lsa, queue'dagi callback'ni stack'ga uzatadi
Xulosa
- Call Stack JavaScript bajarilish tartibining markaziy mexanizmi
- U
LIFOasosida ishlaydi - Function chaqiruvi stack'ga kiradi, tugagach chiqadi
- Cheksiz recursion
Stack Overflowga olib keladi - Async kodlar (
setTimeout) Event Loop orqali navbat bilan stack'ga kiradi