Labs
Small, hands-on labs on how JavaScript actually behaves under the hood. Each lab is
one mental model, one tiny experiment, one prediction before you run it. Concepts are
ordered so nothing is used before it's explained — see CLAUDE.md in the repo
for the full prerequisite graph and page-format spec.
Every lab below is tagged with its primary landmark from
Class 2's recurring-concerns map — the
same small set of questions every programming language has to answer somehow.
Orientation
The bonus class isn't part of the main numbered sequence — it's a standalone C#-background
supplement, skippable if you're following the main Python-scaffolded path.
Foundation — Execution Model & Scope
Functions as a First-Class Concept
| # | Lab | Landmark | Status |
| 11 | Functions Are Objects | ƒFunctions | Not written |
| 12 | Function Declarations vs Function Expressions | ƒFunctions | Not written |
| 13 | IIFEs | ƒFunctions | Not written |
| 14 | Closures | ƒFunctions + ◎Scope | Not written |
| 15 | Closures in Practice: Factories, Currying, Memoization | ƒFunctions | Not written |
| 16 | Callbacks | ƒFunctions | Not written |
| 17 | Default, Rest & Destructured Parameters | ƒFunctions | Not written |
The Object Model
| # | Lab | Landmark | Status |
| 18 | 'this': Method Invocation & Losing 'this' | ▶Execution + ƒFunctions | Not written |
| 19 | call, apply, and bind | ƒFunctions | Not written |
| 20 | Arrow Functions & Lexical 'this' | ƒFunctions + ◎Scope | Not written |
| 21 | By Value vs By Reference | ◇Values & Types | Not written |
| 22 | Object Creation, Property Lookup, Enumeration & Deletion | ▦Data & Objects | Not written |
| 23 | Object Shorthand, Computed Keys & Getters/Setters | ▦Data & Objects | Not written |
| 24 | Optional Chaining, Nullish Coalescing & Logical Assignment | ◇Values & Types | Not written |
| 25 | Prototypes & the Prototype Chain | ▦Data, Objects & Reuse | Not written |
| 26 | Object.create & Pure Prototypal Inheritance | ▦Data, Objects & Reuse | Not written |
| 27 | Constructors and 'new' | ▦Data, Objects & Reuse | Not written |
| 28 | [[Prototype]] vs .prototype vs constructor | ▦Data, Objects & Reuse | Not written |
| 29 | ES6 Classes: constructor, Instances & Instance Methods | ▦Data, Objects & Reuse | Not written |
| 30 | Classes: extends, super, static & #private fields | ▦Data, Objects & Reuse | Not written |
Values & Comparison
| # | Lab | Landmark | Status |
| 31 | Coercion | ◇Values & Types | Not written |
| 32 | Equality: == vs === | ◇Values & Types | Not written |
| 33 | Truthy, Falsy & Existence Checks | ◇Values & Types + ↪Control Flow | Not written |
| 34 | Numeric Precision & Special Values (NaN, -0, float error) | ◇Values & Types | Not written |
| 35 | JSON: The Object/Text Boundary | ◇Values & Types + ▦Data & Objects | Not written |
Collections
| # | Lab | Landmark | Status |
| 36 | Arrays as Objects & length Behavior | ▦Data & Objects | Not written |
| 37 | Map & Set: Why Dedicated Collections Exist | ▦Data & Objects | Not written |
| 38 | WeakMap, WeakSet & Garbage Collection | ⌛Memory & Lifetime | Not written |
| 39 | Iterable/Iterator Protocol & for...of | ↪Control Flow | Not written |
| 40 | Generators: function* and yield | ↪Control Flow + ƒFunctions | Not written |
Errors
| # | Lab | Landmark | Status |
| 41 | throw, try/catch/finally & Stack Unwinding | !Errors & Failure | Not written |
| 42 | Custom Error Classes (extends Error) | !Errors & Failure + ▦Data & Objects | Not written |
Asynchronous JavaScript
| # | Lab | Landmark | Status |
| 43 | The Event Loop: Stack, Host Environment & Task Queue | ⏱Async + ▶Execution | Not written |
| 44 | Microtasks vs Macrotasks | ⏱Async | Not written |
| 45 | Promises: States, .then/.catch/.finally, Chaining | ⏱Async + !Errors | Not written |
| 46 | async/await, Sequential vs Concurrent, Promise.all | ⏱Async | Not written |
Organization
| # | Lab | Landmark | Status |
| 47 | Modules: Module Scope, export/import, Dynamic import() & Top-Level await | ▣Modules + ◎Scope | Not written |