JavaScript
Data Types
What data types exist in modern JS
Variables
var, let and const, hoisting and the temporal dead zone
Functions
Function Declarations, Function Expressions, and Arrow Functions
Execution Context
What the engine creates to run code, hoisting and the scope chain
Closures
A function that remembers the variables of the scope it was created in
The this Keyword
What the `this` keyword refers to in JavaScript
bind, call and apply
bind(), call(), apply()
Arrays
Array methods by group, mutating and non-mutating, common pitfalls
Objects
Cloning objects, accessing properties, iterating, Object static methods
Map, Set, WeakMap and WeakSet
Map vs plain objects, Set and set methods, WeakMap and WeakSet and when to use them
Iterators and Generators
The iteration protocols, generator functions, iterator helpers and async iteration
Prototypes and Inheritance
The prototype chain, __proto__ vs prototype, what new does
Classes
Class syntax, inheritance, private fields and static methods
ES Modules
import and export, live bindings, modules in the browser, dynamic import, top-level await, import maps and import attributes
Event Loop
Call stack, tasks and microtasks, and the order of execution
Promises and async/await
Promise states and chaining, Promise.all vs allSettled vs race vs any, async/await, errors and cancellation
Error Handling
throw, try...catch...finally, custom errors and errors in async code
Debounce and Throttle
Debounce vs throttle, where to use each, an implementation of both and how to use them in React
Garbage Collection
How memory is freed in JavaScript and where leaks come from
Regular Expressions
Creating regular expressions, flags, methods and basic syntax
Common Coding Tasks
An index of live-coding tasks - bind, call/apply, Promise.all, debounce, deep copy, memoize, flat, event emitter, LRU cache - and where each is solved