Series: JavaScript Basics Lesson 14

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:

  1. U stack'ga qo'shiladi (push)
  2. 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 bajariladi
  • setTimeout callback'i to'g'ridan-to'g'ri stack'ga kirmaydi
  • U avval Web APIga ketadi
  • console.log("3") bajariladi
  • Stack bo'shagach, Event Loop callback'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 LIFO asosida 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