Seriya: JavaScript Basics Dars 1

JavaScript Qanday Ishlaydi?

JavaScript engine qanday ishlashini o'rganing: Memory Heap, Call Stack, funksiya chaqiruvlari va execution context.

1-dars

🧠 "JavaScript qanday ishlaydi?"

1️⃣ JavaScript oddiy tarjimon emas

JS bu:

  • Interpreted language (lekin zamonaviy engine JIT ishlatadi)
  • Single-threaded
  • Event-driven

Lekin bularni hali chuqur ochmaymiz. Bugungi fokus — Engine.

2️⃣ JS qayerda ishlaydi?

JS o'zi mustaqil ishlamaydi.

U ishlashi uchun kerak:

🧠 Engine

Mashhur engine:

  • 🟢 V8 — Chrome va Node.js ichida
  • 🟡 SpiderMonkey — Firefox ichida
  • 🔵 JavaScriptCore — Safari ichida

Engine vazifasi:

👉 Sening yozgan JS kodingni
👉 Mashina tushunadigan kodga aylantirish
👉 Uni bajarish

3️⃣ Engine ichida nima bor?

Oddiylashtirib aytsak, 2 ta asosiy qism bor:

📦 1. Memory Heap

Bu yerda:

  • objectlar
  • arraylar
  • functionlar

saqlanadi.

📚 2. Call Stack

Bu yerda:

  • qaysi funksiya ishlayapti
  • qaysi qatorda ishlayapti

nazorat qilinadi.

4️⃣ Oddiy misol

function sayHi() {
  console.log("Hi");
}

sayHi();

Ichkarida nima bo'ladi?

  1. Engine kodni o'qiydi
  2. sayHi funksiyasini heap'da saqlaydi
  3. sayHi() chaqirilganda stack'ga qo'yadi
  4. console.log ishlaydi
  5. Stack'dan chiqariladi

Stack = oxirgi kirgan birinchi chiqadi (LIFO).

5️⃣ Muhim haqiqat

JS:

  • Multi-thread emas
  • Bir vaqtning o'zida bitta ish bajaradi
  • Stack to'lsa — xato beradi (Maximum call stack exceeded)

🧠 Agar funksiya ichida yana funksiya chaqirilsa — Stack'da nima bo'ladi?

Misol:

function one() {
  two();
}

function two() {
  console.log("Hello");
}

one();

🔍 Step-by-step ichkarida nima bo'ladi?

1️⃣ Dastur boshlanadi

👉 Global Execution Context stack'ga qo'yiladi.

Stack:

| Global |

2️⃣ one() chaqiriladi

Engine one() ni stack'ga qo'yadi.

Stack:

| one()   |
| Global  |

3️⃣ one() ichida two() chaqiriladi

Engine two() ni stack'ga qo'yadi.

Stack:

| two()   |
| one()   |
| Global  |

⚠️ E'tibor ber:
Har yangi funksiya chaqirilganda, u stack'ning ustiga qo'yiladi.

4️⃣ two() tugaydi

console.log bajariladi.
two() stack'dan chiqariladi.

Stack:

| one()   |
| Global  |

5️⃣ one() tugaydi

one() ham chiqariladi.

Stack:

| Global |

6️⃣ Dastur tugaydi

Global ham tozalanadi.

Stack bo'sh.