A structured lesson workspace with readable content, hands-on examples, and a clean path to completion.
| Question to ask | Good diagnostic move |
|---|---|
| What value entered? | Inspect the runtime value and type. |
| What rule applied? | Check the construct's language or host semantics. |
| What changed? | Compare the smallest working and failing cases. |
function makeCounter() {let count = 0;return () => ++count;}const next = makeCounter();console.log(next(), next());
<strong>Core idea:</strong> Functions are the unit you use to package behavior, but their real power comes from scope, composition, and the way JavaScript retains references to surrounding state. In this lesson, the practical target is global, function, and block scope: you should be able to predict what the runtime will do before changing the code.
<strong>Core idea:</strong> Functions are the unit you use to package behavior, but their real power comes from scope, composition, and the way JavaScript retains references to surrounding state. In this lesson, the practical target is global, function, and block scope: you should be able to predict what the runtime will do before changing the code.
Mentor note: for global, function, and block scope, name the invariant you need before reaching for a clever shortcut. Clear state and explicit assumptions make later debugging much cheaper.
Finish the lesson once you have worked through the material. This awards ★ 20 XP.