April 15

JavaScript asoslari

Hozirgi kunga kelib barcha browserlar uchun eng optimal (dynamic) til bolib qolgan js tarixi va uning ichiga birma bir kirib boramiz :)

JavaScript (JS) – bu:

  • High-level (yuqori darajadagi) dasturlash tili.
  • Dinamik tipga egavar a = 5;a har qanday turdagi qiymatga aylanishi mumkin.
  • Interpreted (tushuntiriluvchi) til — ammo zamonaviy brauzerlar uni JIT (Just-In-Time) orqali kompilyatsiya qiladi.
  • Single-threaded – bitta ipda ishlaydi, lekin asinxronlikni (callback, promise, async/await) qo‘llab-quvvatlaydi.


JavaScript tarixi (pot-kapot tarixi) :

1995 – Brendan Eich Netscape brauzeri uchun 10 kunda JS'ni yaratdi.

  • Dastlab nomi Mocha, keyin LiveScript, so‘ngra JavaScript bo‘ldi (Java’ga hech aloqasi yo‘q – bu marketing uchun bo‘lgan).
  • Internetning interaktiv bo‘lishi uchun yaratilgan.

1997 – JS standarti ECMAScript (ES) nomi ostida paydo bo‘ldi.

  • ES3 – 1999
  • ES5 – 2009 (strict mode)
  • ES6 / ES2015 – 2015 (let/const, arrow functions, classes, promises, modules)

Hozirgi JS:

  • Node.js orqali serverda ishlaydi.
  • Electron, React Native orqali desktop va mobil ilovalar yaratiladi.
  • Typescript – JS ustiga typed qatlam.

JS qanday ishlaydi?

High-level tilda yozilgan kod brauzer yoki Node.js orqali quyidagicha ishlaydi:

  1. Parsing: Kodni AST (Abstract Syntax Tree) ga aylantiradi.
  2. Compilation: V8 (Google) yoki boshqa engine uni JIT (Just-in-time) orqali mashina kodga o‘giradi.
  3. Execution: Mashina kodi ishlaydi.

JS Engine misol:

  • Chrome: V8
  • Firefox: SpiderMonkey
  • Safari: JavaScriptCore

Compilation va Interpretation

  • Compiler – butun kodni oldindan mashina tiliga aylantiradi.
  • Interpreter – kodni qatorma-qator bajaradi.

JS:

  • Ilgari faqat interpreter edi.
  • Hozir V8 engine orqali JIT compiler ishlaydi:
    • Tez-tez ishlatiladigan kodni mashina kodga aylantiradi va kechiktirmasdan bajaradi.


Event Loop, Call Stack, Microtask vs Macrotask

Call Stack:

  • Har bir funksiyaning bajarilishi bu yerga qo‘shiladi va bajarilgach chiqariladi.

Event Loop:

  • Call Stack bo‘sh bo‘lsa, Task Queuedan ish olib kiradi.

Macrotask Queue:

  • setTimeout
  • setInterval
  • setImmediate (Node.js)
  • I/O callbacks

Microtask Queue:

  • Promises (.then, async/await)
  • MutationObserver
  • QueueMicrotask
Microtasks har doim Macrotasksdan oldin bajariladi.
console.log('1');
setTimeout(() => {
  console.log('2');
}, 0);
Promise.resolve().then(() => {
  console.log('3');
});
console.log('4');
1
4
3  <— microtask
2  <— macrotask

Xulosa

JS:

  • High-level, dynamic, interpreted → hozirda JIT compiled.
  • Single-threaded lekin event loop yordamida asinxron.
  • Tarixan brauzerlar uchun yaratilgan, hozir esa universal tilga aylangan.
  • Microtask & Macrotask tizimi orqali noaniq kechikishlarni boshqaradi.