Introduce a Learner
Return a friendly greeting from a learner's display name.
- values
- strings
- functions
Work through focused modules covering data, functions, async behavior, browser runtime, and real interview trade-offs. Start anywhere, then use the suggested order to build stronger evidence.
35
Available activities
6
Learning modules
Newbie to hard
Progression within modules
Modules group related concepts. Activities move from easy to hard; prerequisites guide you without blocking experienced learners.
Start with plain JavaScript: values, decisions, loops, strings, arrays, and small functions.
Return a friendly greeting from a learner's display name.
Decide whether a number is positive, negative, or zero.
Count how many values in a list can be divided by two without a remainder.
Add every number in a list and return the total.
Return the largest number in a list, or null when the list is empty.
Return the characters of a word in reverse order.
Count the vowels in a word without treating uppercase and lowercase differently.
Return a list containing the same message a requested number of times.
Return the average of a list of scores, or null when no scores exist.
Return a sentence with the first letter of every word uppercase.
Use map to turn numeric scores into readable labels without changing the original list.
Use an implicit return in a small helper and an explicit return in the main function.
Create a new preferences object by combining defaults with user overrides.
Use a setter to keep a progress value between zero and one hundred.
Keep only scores that meet the practice passing mark.
Build reliable instincts for values, objects, arrays, and safe transformations.
Build predictable display labels from mixed request records without mutating the source list.
Repair a release ordering helper so it is deterministic and leaves the input untouched.
Repair a nested state update that accidentally changes a previous snapshot.
Update a named deployment field without mutating the existing form object.
Read a safe retry delay from incomplete client configuration.
Turn unknown release API data into safe row records without assuming its shape.
Read nested release data with defaults and return a stable summary.
Parse stored preferences without letting invalid storage break the UI.
Convert unknown request outcomes into a small UI-safe result contract.
Understand the execution model behind closures, callbacks, receivers, and modules.
Use a closure to keep independent notification counts private to each counter.
Repair an extracted method that loses the release object it should describe.
Apply a sequence of named checks by treating functions as values.
Distinguish instance data from shared prototype behavior.
Keep a preference value private behind a small closure-based API.
Expose a narrow feature-flag module instead of leaking mutable internal state.
Reason about ordering, failure, cancellation, and competing asynchronous work.
Predict and implement the observable order of synchronous work, promise callbacks, and timers.
Retry a transient preference-save failure and return a predictable result.
Prevent an older search response from replacing the newest query result.
Model the final query that remains after rapid input changes settle.
Return a timeout result when a simulated request cannot finish in budget.
Apply JavaScript knowledge to DOM events, browser APIs, and real UI boundaries.
Combine multiple concepts while debugging, reviewing, refactoring, and explaining code.