JavaScript Execution Context, Call Stack & Event Loop Explained

🚀 How JavaScript Actually Works — In Depth (Execution Context, Call Stack & More). Let’s break it down step by step. 🔹 1. JavaScript Is Single-Threaded — But Asynchronous JavaScript has: • One main thread • One Call Stack • But it can still handle asynchronous operations efficiently This is possible because of the JavaScript Runtime Environment, which includes: • Call Stack • Heap Memory • Web APIs (in browsers) • Callback Queue • Microtask Queue • Event Loop 🔹 2. Global Execution Context (GEC) Is Created First When your JavaScript file starts running, the very first thing created is the Global Execution Context, which has two phases: ✅ Phase 1 — Memory Creation (Hoisting Phase) JavaScript scans the entire code and allocates memory for: • Variables → stored as undefined • Functions → stored with full function definition Example: console.log(name); var name = "Raj"; function greet() { console.log("Hello"); } During memory phase: • name → allocated as undefined • greet → stored as actual function This is why console.log(name) prints undefined and not an error. 🔹 3. Phase 2 — Code Execution Phase Now JavaScript starts executing line by line. • console.log(name) → prints undefined • Then name = "Raj" is assigned • Functions execute only when called 🔹 4. Function Execution Context (FEC) Whenever a function is called, a new Execution Context is created on top of the Call Stack. Example: function add(a, b) { return a + b; } add(5, 10); Steps: Global Execution Context exists add(5,10) is called New Execution Context for add() is created It has: • Its own memory space • Its own variables • Its own return value Once the function finishes, its execution context is removed from the Call Stack. 🔹 5. Call Stack — The Heart of JavaScript Execution The Call Stack follows LIFO (Last In, First Out). Example: function first() { second(); } function second() { third(); } function third() { console.log("Done"); } first(); Call Stack Flow: • first() pushed • second() pushed • third() pushed • third() completes → popped • second() completes → popped • first() completes → popped 🔹 6. How Asynchronous Code Runs (Event Loop) Example: console.log("Start"); setTimeout(() => { console.log("Inside Timeout"); }, 0); console.log("End"); Execution Order: "Start" prints setTimeout goes to Web APIs "End" prints Callback goes to Callback Queue Event Loop moves it to Call Stack "Inside Timeout" prints Even with 0ms, it runs after synchronous code. 🔹 7. Microtasks vs Macrotasks Microtasks (higher priority): • Promises • MutationObserver Macrotasks: • setTimeout • setInterval Example: console.log("A"); setTimeout(() => console.log("B"), 0); Promise.resolve().then(() => console.log("C")); console.log("D"); Output: A D C B Because Microtasks run before Macrotasks. #JavaScript #WebDevelopment #Frontend #NodeJS #EventLoop #ExecutionContext #SoftwareEngineering #Programming #JSMastery

  • graphical user interface

To view or add a comment, sign in

Explore content categories