Docs
README
Module 12: JavaScript Execution Context & Runtime
π Overview
Understanding how JavaScript executes code is crucial for mastering the language. This module explores the JavaScript engine's internalsβhow code is parsed, executed, and managed at runtime. You'll learn about execution contexts, the call stack, memory management, and the event loop.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β JAVASCRIPT RUNTIME ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β JAVASCRIPT ENGINE (V8, SpiderMonkey) β β
β β ββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββββββ β β
β β β CALL STACK β β HEAP MEMORY β β β
β β β ββββββββββββββββββ β β ββββββββ ββββββββ ββββββββ β β β
β β β β function C() β β β β Obj1 β β Obj2 β β Arr1 β β β β
β β β ββββββββββββββββββ€ β β ββββββββ ββββββββ ββββββββ β β β
β β β β function B() β β β Objects, Arrays, Functions β β β
β β β ββββββββββββββββββ€ β β stored here β β β
β β β β function A() β β β β β β
β β β ββββββββββββββββββ€ β ββββββββββββββββββββββββββββββββββββββββ β β
β β β β Global EC β β β β
β β β ββββββββββββββββββ β β β
β β ββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β WEB APIs (Browser) β β
β β setTimeout β fetch β DOM Events β Geolocation β IndexedDB β β
β βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CALLBACK QUEUE β MICROTASK QUEUE β β
β β ββββββ ββββββ ββββββ β ββββββ ββββββ ββββββ β β
β β β T1 β β T2 β β T3 β β β P1 β β P2 β β P3 β β β
β β ββββββ ββββββ ββββββ β ββββββ ββββββ ββββββ β β
β β setTimeout, Events β Promises, queueMicrotask β β
β ββββββββββββββββββββββββββ¬βββββ΄βββββββββββββββββββ¬βββββββββββββββββββββββββ β
β β β β
β βββββββββββββ¬ββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββ β
β β EVENT LOOP β β
β β (Monitors & Moves β β
β β tasks to stack) β β
β ββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π― Why This Module Matters
Understanding execution context and the runtime is essential for:
| Concept | Why It Matters |
|---|---|
| Execution Context | Understand this, scope, closures at a deeper level |
| Call Stack | Debug stack traces, understand recursion limits |
| Hoisting | Avoid subtle bugs with variable/function declarations |
| Event Loop | Write efficient async code, avoid blocking |
| Memory Management | Prevent memory leaks, optimize performance |
π Module Contents
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MODULE 12: EXECUTION CONTEXT & RUNTIME β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 12.1 EXECUTION CONTEXT β β
β β βββββββββββββββββββββββββ β β
β β β’ Global execution context (created first) β β
β β β’ Function execution context (per function call) β β
β β β’ Creation phase vs execution phase β β
β β β’ Lexical environment & variable environment β β
β β β’ The `this` binding β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 12.2 THE CALL STACK β β
β β ββββββββββββββββββββ β β
β β β’ Stack data structure (LIFO) β β
β β β’ Push on function call, pop on return β β
β β β’ Stack overflow (too much recursion) β β
β β β’ Reading stack traces for debugging β β
β β β’ Maximum call stack size (~10,000-15,000 in V8) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 12.3 HOISTING DEEP DIVE β β
β β ββββββββββββββββββββββββ β β
β β β’ var is hoisted (initialized to undefined) β β
β β β’ let/const are hoisted but NOT initialized (TDZ) β β
β β β’ Function declarations hoisted completely β β
β β β’ Function expressions NOT hoisted β β
β β β’ Class declarations NOT hoisted β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 12.4 THE EVENT LOOP β β
β β ββββββββββββββββββββ β β
β β β’ Single-threaded but non-blocking β β
β β β’ Call stack β Web APIs β Queues β Back to stack β β
β β β’ Microtask queue (Promises) runs before Macrotask queue β β
β β β’ setTimeout(fn, 0) isn't really 0ms β β
β β β’ requestAnimationFrame for smooth animations β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 12.5 MEMORY MANAGEMENT β β
β β ββββββββββββββββββββββββ β β
β β β’ Stack memory (primitives, references) β β
β β β’ Heap memory (objects, arrays, functions) β β
β β β’ Garbage collection (mark and sweep) β β
β β β’ Common memory leak patterns β β
β β β’ WeakMap/WeakSet for automatic cleanup β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Key Concepts Preview
Execution Context Phases
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXECUTION CONTEXT LIFECYCLE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β function example(a, b) { β
β var x = 10; β
β function inner() { return a + b; } β
β return x + inner(); β
β } β
β example(1, 2); β
β β
β CREATION PHASE EXECUTION PHASE β
β βββββββββββββββ ββββββββββββββββ β
β β
β βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β Variable Environment: β β Variable Environment: β β
β β x: undefined β βββΆ β x: 10 β β
β β β β β β
β β Lexical Environment: β β Lexical Environment: β β
β β inner: <function> β β inner: <function> β β
β β arguments: [1, 2] β β arguments: [1, 2] β β
β β a: 1, b: 2 β β a: 1, b: 2 β β
β β β β β β
β β this: window/undefined β β this: window/undefined β β
β β β β β β
β β Outer: Global EC β β Outer: Global EC β β
β βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β
β β’ Variables declared with `var` β set to undefined β
β β’ Functions β fully hoisted β
β β’ `this` β determined by how function is called β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Event Loop Visualization
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EVENT LOOP IN ACTION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β console.log('1'); β
β setTimeout(() => console.log('2'), 0); β
β Promise.resolve().then(() => console.log('3')); β
β console.log('4'); β
β β
β OUTPUT: 1, 4, 3, 2 β
β β
β WHY? β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β
β β CALL STACK β β MICROTASKS β β MACROTASKS β β
β β β β (Priority) β β (After) β β
β βββββββββββββββββ€ βββββββββββββββββ€ βββββββββββββββββ€ β
β β 1. log('1') β β β Promise.then β β setTimeout β β
β β 2. setTimeout ββββΆ β β log('3') β β β log('2') β β
β β 3. Promise ββββΆ β β β β β
β β 4. log('4') β β β Runs FIRST β² β β Runs LAST β² β β
β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β
β β
β PRIORITY ORDER: β
β 1. Synchronous code (call stack) β
β 2. Microtasks (Promises, queueMicrotask) β
β 3. Macrotasks (setTimeout, setInterval, I/O) β
β 4. Render (if in browser) β
β 5. Repeat β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Hoisting Reference
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HOISTING BEHAVIOR β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββββββββββββ¬ββββββββββββββ¬ββββββββββββββββββββββββββ β
β β Declaration β Hoisted? β Initial Value β β
β ββββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββββββββ€ β
β β var x = 5; β β
β undefined β β
β β let y = 5; β β
* β TDZ (error) β β
β β const z = 5; β β
* β TDZ (error) β β
β β function foo() {} β β
β <function> β β
β β const foo = () => {} β β
* β TDZ (error) β β
β β class Foo {} β β
* β TDZ (error) β β
β ββββββββββββββββββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββββββββββββ β
β β
β * Hoisted but in Temporal Dead Zone until declaration line β
β β
β TDZ = Temporal Dead Zone (ReferenceError if accessed before init) β
β β
β EXAMPLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β console.log(a); // undefined (var hoisted, init to undefined) β β
β β console.log(b); // ReferenceError (let is in TDZ) β β
β β var a = 1; β β
β β let b = 2; β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Prerequisites
Before starting this module, you should understand:
- β’β Functions (Module 5) - especially closures and scope
- β’β Basic understanding of async callbacks
- β’β
How
thisworks in different contexts (Module 10)
π Learning Path
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RECOMMENDED ORDER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. 12.1 Execution Context β
β ββββΆ Foundation for understanding how JS runs code β
β β
β 2. 12.2 The Call Stack β
β ββββΆ See how function calls are tracked β
β β
β 3. 12.3 Hoisting Deep Dive β
β ββββΆ Understand creation phase behavior β
β β
β 4. 12.4 The Event Loop β
β ββββΆ Critical for async programming β
β β
β 5. 12.5 Memory Management β
β ββββΆ Optimization and avoiding leaks β
β β
β ESTIMATED TIME: 4-6 hours β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Key Takeaways
After completing this module, you'll understand:
| Concept | You'll Be Able To |
|---|---|
| Execution Context | Explain how JS creates and manages contexts |
| Call Stack | Read and debug stack traces effectively |
| Hoisting | Predict how declarations behave |
| Event Loop | Write non-blocking async code |
| Memory | Identify and fix memory leaks |
π Related Modules
- β’Module 5: Functions - Scope and closures foundation
- β’Module 15: Async JavaScript - Practical async programming
- β’Module 24: Engine Internals - V8 optimization deep dive