JS Runtime / Execution context
Tags: runtime, execution, context, aripovdev
Published: 2024-06-20 13:11:23

JavaScript runtime bu JavaScript kodini ishlatish uchun zarur bo'lgan muhit yoki dvijok. Ushbu runtime muhitlari JavaScript kodini tahlil qiladi, va bajaradi.Javascript Browserda ishga tushadigan yagona til hisoblanadi.

Runtime turlari va ishlash muhiti:
1-Google chrome (Browser)

Brauzerlar JavaScript'ning asosiy runtime muhiti hisoblanadi. Har bir brauzer o'zining JavaScript dvijokiga ega:

- Google Chrome: V8 dvijoki.
- Mozilla Firefox: SpiderMonkey dvijoki.
- Safari: JavaScriptCore (Nitro) dvijoki.
- Microsoft Edge: Chakra eski versiyalar va V8 yangi versiyalar.

Brauzer JavaScript runtime muhitida JavaScript kodini HTML va CSS bilan birgalikda ishlatish mumkin.

2-Node.js

Node.js - server tomonda JavaScript ishlatish uchun runtime muhitdir. Bu muhit V8 dvijokiga asoslangan bo'lib, brauzerdan tashqarida ham JavaScript kodini bajarish imkoniyatini beradi.
_Nodejs texnalogiyasi javascript codlarimini browserdan tashqarida ishga tushurib beradi._
- Server skriptlar: HTTP serverlar, API'lar va boshqalar.
- Asinxron ishlash: Node.js ning asinxron tabiati uni yuqori samarali va tezkor qiladi.
- Katta ekotizim: Node.js uchun juda ko'p modullar va kutubxonalar mavjud.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/19w49f09e0r11gi5ic6q.png)

**Execution context**

JavaScript dasturlash tilida execution context  bu kodni bajarish uchun zarur bo'lgan barcha ma'lumotlarni o'z ichiga olgan muhitdir. Har bir bajariladigan kodning o'z execution contexti bo'ladi. Execution context quyidagi elementlarni o'z ichiga oladi:

- Variable Object 
Bu yerda barcha o'zgaruvchilar, funksiyalar va argumentlar saqlanadi.
- Scope Chain
Scope chain o'zgaruvchilar va funktsiyalarni qidirish tartibini ifodalaydi. Har bir execution context o'z scope chainiga ega va bu scope chain tashqi parent execution contextlarining referencelarini o'z ichiga oladi.

- this Keyword
this kalit so'zi, execution contextga bog'liq holda har xil obyektlarga ishora qilishi mumkin.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/18mlpa8ipdwda924mosb.png)

**Execution Context Turlari**

JavaScriptda asosiy 2 hil turdagi execution context mavjud:

1-Global Execution Context:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8mhaz42tc95xmjpfmpgi.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ycwljoim7y4e531e5c8.png)


2-Function Excution Context:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcghlkzrznkke6pdh7ag.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu1plyy26y29mzbt6sm8.png)
**
javascriptda  global execution va function execution**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xy08j6aa2qmzl1q4abe3.png)

 Execution context ishlash jarayoni:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukmip4nz965y8dw5k8z3.png)
**Execution Context**
JavaScript brauzerda ishlayotganida, uni to’g’ridan-to’g’ri tushuna olmasligi sababli uni mashina tushunadigan tilga aylantirish kerak ya’ni o’zi tushunadigan tilga. Brauzerning JavaScript engine(mexaniz)ni JavaScript kodiga duch kelganida, u biz yozgan JavaScript kodini “translation(tarjima)” qiladi va bajarilishini boshqaradigan maxsus muhit yaratadi. Bu muhit Execution context deb ataladi.

***Execution context** **global scope** va **function scope** ga ega bo’lishi mumkin. JavaScript birinchi marta ishlay boshlaganida, u **global scope** yaratadi.*

*Keyin, JavaScript **parse**(tahlil) qilinadi va o’zgaruvchi va funksiya deklaratsiyasini **xotiraga saqlaydi**.*

*Nihoyat, kod xotirada saqlangan o’zgaruvchilar ishga tushiriladi.*

Execution context - har bir block kod uchun  JavaScript tomonidan ochiladigan ma’lumotlar bloki bo’lib, ayni damda ishlayotgan kod uchun kerak bo’ladigan barcha ma’lumotlarni o’zida jamlaydi. Masalan, o’zgaruvchilar/funksiyalar/this kalit so’zi


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rntetnscmgiu6ljtuqsi.png)

- Creation phase - var bilan e’lon qilingan o’zgaruvchilarga **undefined** o’zlashtiriladi, let bilan e’lon qilingan o’zgaruvchilar esa **uninitilized** bo’lib turadi va funksiyalar o’qiladi.
- Execution phase - o’zgaruvchilarga qiymat o’zlashtirilib, funksiyalar chaqiriladi.