Predict the Output

Event loop order

Example

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');

Output

A
D
C
B

Synchronous code first (A, D), then microtasks (C), then macrotasks (B).

Closures in loops

Example

for (var i = 0; i < 3; i++) setTimeout(() => console.log('var', i));
for (let j = 0; j < 3; j++) setTimeout(() => console.log('let', j));

Output

var 3
var 3
var 3
let 0
let 1
let 2

var has one shared binding (already 3 when the timers run); let creates a new binding per iteration.

Stale state

Example

What does the counter show after one click on "+3"?

import { useState } from 'react';

export default function App() {
  const [n, setN] = useState(0);
  const addThree = () => { setN(n + 1); setN(n + 1); setN(n + 1); };
  return <button onClick={addThree}>+3 → {n}</button>;
}

Result

It shows 1, not 3: all three calls use the same n from this render. Use setN(prev => prev + 1).