Frontend Developer interview prep
A spaced-repetition deck of 121+ Frontend Developer interview questions — organised by topic and difficulty, and resurfaced right before you'd forget. Preview a few cards below, then choose access to study the whole track on an Anki-style SM-2 schedule.
7 days free on monthly or yearly · every feature included.
What's covered
Every topic in this track, grouped the way you'd study it.
HTML & CSS
12 cardsJavaScript
14 cardsTypeScript
10 cardsReact & Frameworks
14 cardsBrowser & Performance
10 cardsAccessibility
8 cardsTooling, Build & Testing
10 cardsFrontend System Design
8 cardsBehavioral
35 cardsSample questions
A few cards from the deck — reveal each answer, then choose access to study the full set on a schedule.
What is semantic HTML and why does it matter (accessibility, SEO, maintainability)?
What is semantic HTML and why does it matter (accessibility, SEO, maintainability)?
Short answer: Semantic HTML means using tags for their meaning (<nav>, <article>, <button>) instead of <div> for everything. Browsers and assistive tech understand the document structure, which buys you accessibility, SEO, and readable code.
In depth:
- Accessibility (a11y) — screen readers build the accessibility tree from tags:
<nav>,<main>,<h1>enable landmark and heading navigation. Div soup is announced as unstructured text. - SEO — search engines treat
<article>,<h1>–<h6>,<time>as structure and content-importance signals. - Maintainability —
<header>/<footer>/<aside>self-document the markup; you don't read class names to learn a block's role. - Free behavior —
<button>is focusable and reacts to Enter/Space,<a>navigates,<details>toggles — no JS required.
<!-- ❌ div soup -->
<div class="nav"><div class="link" onclick="go()">Home</div></div>
<!-- ✅ semantic -->
<header>
<nav aria-label="Primary">
<a href="/">Home</a>
</nav>
</header>
<main>
<article>
<h1>Article title</h1>
<time datetime="2026-06-30">June 30, 2026</time>
</article>
</main>
⚠️ Common mistake: making a clickable <div onclick> instead of a <button> — you lose focus, keyboard handling, and the screen-reader role.
What is hoisting, and how do var, let, and const differ in scope and TDZ?
What is hoisting, and how do var, let, and const differ in scope and TDZ?
Short answer: Hoisting is moving declarations to the top of their scope at compile time. var is hoisted and initialized to undefined (function scope), while let/const are hoisted but stay in the TDZ (temporal dead zone) until the declaration line and have block scope.
In depth:
- var — function scope, readable as
undefinedbefore declaration, re-declarable. - let — block scope, in the TDZ until declaration, reassignment allowed.
- const — like
letbut no reassignment (the object's value itself is still mutable). - TDZ — accessing a
let/constbefore declaration throwsReferenceErrorinstead of returningundefined.
console.log(a); // undefined — var hoisted
var a = 1;
console.log(b); // ReferenceError — b in TDZ
let b = 2;
| Scope | Before declaration | Reassign | |
|---|---|---|---|
| var | function | undefined |
yes |
| let | block | TDZ → error | yes |
| const | block | TDZ → error | no |
⚠️ Common mistake: believing let/const "aren't hoisted." They are — but accessing them before initialization throws because of the TDZ.
Why use TypeScript over JavaScript, and what is structural (duck) typing?
Why use TypeScript over JavaScript, and what is structural (duck) typing?
Short answer: TypeScript adds static type checking on top of JS: errors are caught in the editor and at build time instead of at runtime. Its typing is structural — compatibility is decided by an object's shape (its set of fields), not by the type's name or an explicit implements.
In depth:
- What TS buys you — autocompletion and navigation, safe refactoring, self-documenting contracts, catching typos and
undefinedbefore running. - Structural vs nominal — in Java/C# types match by name (nominal typing). In TS, if an object has the required fields it fits, even if it was created with no knowledge of the target type.
- Type erasure — types exist only at compile time; at runtime it is plain JS. You can't
instanceof-check an interface.
interface Point { x: number; y: number }
function len(p: Point): number {
return Math.hypot(p.x, p.y);
}
// the object never declared implements Point, but its shape fits
const v = { x: 3, y: 4, label: "v" };
len(v); // OK — structural typing: the extra label field is fine
⚠️ Common mistake: assuming TS protects you at runtime. Data from an API must be validated (zod, etc.) — the compiler takes your annotations on faith.
What is JSX and what does it compile to?
What is JSX and what does it compile to?
Short answer: JSX is syntactic sugar over element-creation calls. A compiler (Babel/SWC) turns it into jsx-runtime calls (or React.createElement in the classic transform) that return plain JS objects describing the UI — not real DOM nodes.
In depth:
- It's an expression, not HTML — JSX compiles to JavaScript and can go anywhere an expression is allowed.
- The new JSX transform (React 17+) — imports
jsx/jsxsfromreact/jsx-runtime, so you no longer needimport Reactjust for JSX. - It returns an element object — shaped like
{ type, key, props }; real DOM appears only on render. - Case matters — a capitalized tag is a component, a lowercase one is a DOM element.
const el = <button className="btn" onClick={fn}>Save</button>;
// the new transform compiles this to:
import { jsx } from "react/jsx-runtime";
const el = jsx("button", { className: "btn", onClick: fn, children: "Save" });
⚠️ Common mistake: treating JSX as a string or HTML. It's JS: you write className, not class, and attributes are camelCase (onClick, tabIndex).
What is the Critical Rendering Path and which resources block it?
What is the Critical Rendering Path and which resources block it?
Short answer: The Critical Rendering Path is the browser's sequence from receiving HTML to the first painted pixel: DOM + CSSOM → render tree → layout → paint → composite. Synchronous CSS and blocking JS delay this path.
In depth:
- DOM — the browser parses HTML into a tree of nodes.
- CSSOM — the style object model is built in parallel; CSS blocks rendering because styles can't be computed without it.
- Render tree — DOM and CSSOM merge;
display: nonenodes are dropped. - Layout (reflow) — element geometry and positions are computed.
- Paint — nodes are rasterized into pixel layers.
- Composite — layers are assembled on screen (often on the GPU).
HTML ─► DOM ─┐
├─► Render Tree ─► Layout ─► Paint ─► Composite ─► screen
CSS ─► CSSOM┘
▲ blocks rendering ▲ <script> without defer/async
⚠️ Common mistake: assuming JS never interferes with rendering. A synchronous <script> in the <head> halts HTML parsing and DOM construction — use defer or move scripts to the bottom.
What is accessibility (a11y) and why does it matter?
What is accessibility (a11y) and why does it matter?
Short answer: Accessibility (a11y) means designing products so people with visual, hearing, motor, and cognitive disabilities can use them. It matters for three reasons: ethical (people), business (wider audience), and legal (WCAG, ADA, the European Accessibility Act).
In depth:
- People — about 15% of the population lives with some disability; temporary (a broken arm) and situational (bright sun, a noisy train) limitations affect everyone.
- Business — more users, better SEO (semantics = clear structure), fewer drop-offs.
- Law — WCAG 2.x is the de-facto standard; the US has ADA/Section 508, the EU has the EAA; lawsuits over inaccessible sites are real.
| Disability | Barrier | Solution |
|---|---|---|
| Vision | can't see the screen | screen reader, contrast, alt |
| Hearing | can't hear audio | captions, transcripts |
| Motor | can't use a mouse | keyboard accessibility |
| Cognitive | complex UI | plain language, clear structure |
⚠️ Common mistake: treating accessibility as a 'feature for a minority' — in reality it improves UX for everyone (the curb-cut effect).
Ready to make it stick?
Start your first session in under a minute. Your future self, mid-interview, will thank you.
Questions about this track
How should I prepare for a Frontend Developer interview?
Study the concepts you'll be asked to explain, not just the ones you can code. RecallDeck's Frontend Developer track gives you 121+ curated interview questions and resurfaces each one with an Anki-style SM-2 schedule right before you'd forget it — so the answers are still there under pressure on interview day.
What topics does the Frontend Developer track cover?
The Frontend Developer track is organised into the core areas Frontend Developer interviews actually test, grouped by topic and by difficulty (Concept, Junior, Middle, Senior). You can preview the full outline and sample questions above before signing in.
Is spaced repetition effective for Frontend Developer interview prep?
Yes. Actively recalling an answer and grading yourself honestly builds far more durable memory than re-reading notes. RecallDeck schedules each Frontend Developer card to reappear at the moment you're about to forget it, so your daily reviews shrink while your recall holds.
Can I try the Frontend Developer track before paying?
Yes. Monthly and yearly access include a seven-day trial of the complete Frontend Developer track, the full SM-2 scheduler, statistics, flexible pacing, and cram mode. You can cancel online before the first charge.