Javascript - TypeScript

Must Read: SOLID Design Principles Every JavaScript Developer Should Know

What is the Event Loop? How does JavaScript handle multiple lines of code, even with a single-threaded architecture?

🧠 Event Loop āϕ⧀?

JavaScript āĻāĻ•āϟāĻŋ single-threaded āĻ­āĻžāώāĻž āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻžāϜāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻžāĻšāϞ⧇ āĻĒā§āϰāĻļā§āύ āĻšāϞ⧋:

👉 "āϝāĻ–āύ āϕ⧇āω API call āĻĻ⧇āϝāĻŧ, āĻŦāĻž āĻŦ⧜ āϕ⧋āύ⧋ file āĻĒāĻĄāĻŧ⧇, āϤāĻ–āύ āϤ⧋ āϏ⧇āχ āĻ•āĻžāϜ āĻļ⧇āώ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒ⧁āϰ⧋ āϕ⧋āĻĄ āφāϟāϕ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āĻ•āĻĨāĻž!"

āĻāĻ–āĻžāύ⧇āχ āφāϏ⧇ Event LoopāĨ¤ āĻāϟāĻž āĻāĻŽāύ āĻāĻ•āϟāĻž āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ, āϝ⧇āϟāĻž JavaScript āϕ⧇ non-blocking, asynchronous, āĻāĻŦāĻ‚ efficient āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤


đŸŽ¯ Core Concepts āĻŦā§‹āĻāĻž āϝāĻžāĻ•:

1. Call Stack:

āĻāĻ–āĻžāύ⧇ āϏāĻŦ synchronous (āϤāĻžāĻ¤ā§āĻ•ā§āώāĻŖāĻŋāĻ•) āĻ•āĻžāϜ āĻāϕ⧇āϰ āĻĒāϰ āĻāĻ• āϝāĻžā§ŸāĨ¤ āϝ⧇āĻŽāύ: console.log, math calculation āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤

console.log('Hello');
// āĻāϟāĻŋ āϏāϰāĻžāϏāϰāĻŋ Call Stack āĻ āĻĸ⧁āϕ⧇ execute āĻšā§ŸāĨ¤

2. Web APIs (Browser APIs):

āϝāĻ–āύ asynchronous āĻ•āĻžāϜ āϝ⧇āĻŽāύ setTimeout, fetch, event listener āĻšāϝāĻŧ āϤāĻ–āύ āϏ⧇āϟāĻž call stack āĻĨ⧇āϕ⧇ āĻŦ⧇āϰ āĻšā§Ÿā§‡ browser/web API āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇āĨ¤

setTimeout(() => {
  console.log('Timer');
}, 1000);

āĻāĻ–āĻžāύ⧇ browser āύāĻŋāĻœā§‡ āϟāĻžāχāĻŽāĻžāϰ āϚāĻžāϞāĻžā§Ÿ, JS āχāĻžā§āϜāĻŋāύ āύāĻžāĨ¤

3. Callback Queue (or Task Queue):

āϝāĻ–āύ Web API āϤāĻžāϰ āĻ•āĻžāϜ āĻļ⧇āώ āĻ•āϰ⧇, āϤāĻ–āύ result āĻŦāĻž callback function āĻāχ queue āϤ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻā§‡ā§ŸāĨ¤

4. Event Loop:

āĻāϟāĻžāχ āĻĒ⧁āϰ⧋ orchestra-āϰ āĻ•āĻ¨ā§āĻĄāĻžāĻ•ā§āϟāϰāĨ¤ Event loop āĻāĻ•āϟāĻžāϰ āĻĒāϰ āĻāĻ•āϟāĻž āĻ•āϰ⧇ āĻšā§‡āĻ• āĻ•āϰ⧇ “Call Stack āĻĢāĻžāρāĻ•āĻž āĻšā§Ÿā§‡āϛ⧇ āĻ•āĻŋāύāĻž?” āϝāĻĻāĻŋ āĻĢāĻžāρāĻ•āĻž āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ Callback Queue āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻž āĻ•āĻžāϜ āĻŸā§‡āύ⧇ āύāĻŋāϝāĻŧ⧇ Call Stack āĻ āĻĸ⧁āĻ•āĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧāĨ¤


🔁 āĻŦāĻžāĻ¸ā§āϤāĻŦ āωāĻĻāĻžāĻšāϰāĻŖ āφāĻŦāĻžāϰ āĻĻ⧇āĻ–āĻž āϝāĻžāĻ•:

console.log('Start');

setTimeout(() => {
  console.log('Inside Timeout');
}, 0);

console.log('End');

➤ Execution Flow:

  1. 'Start' → Call Stack → Console āĻ print ✅

  2. setTimeout() → Web API-āϤ⧇ āϚāϞ⧇ āϝāĻžāϝāĻŧ 🕐

  3. 'End' → Call Stack → Console āĻ print ✅

  4. Timer āĻļ⧇āώ āĻšāϞ⧇ callback āϝāĻžā§Ÿ Callback Queue āϤ⧇ âŗ

  5. Event Loop āĻĻ⧇āϖ⧇ Call Stack āĻĢāĻžāρāĻ•āĻž → Callback Queue āĻĨ⧇āϕ⧇ callback āύāĻŋā§Ÿā§‡ Call Stack āĻ āĻĒāĻžāĻ āĻžā§Ÿ

  6. 'Inside Timeout' → Console āĻ print ✅

âš ī¸ āϝāĻĻāĻŋāĻ“ setTimeout āĻāϰ delay 0ms, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāĻ“ āϏ⧇āϟāĻž āφāϏāϤ⧇ āĻ•āĻŋāϛ⧁ āϏāĻŽā§Ÿ āϞāĻžāϗ⧇āĨ¤ āϤāĻžāχ āϏ⧇āϟāĻž āϏāĻŦāĻļ⧇āώ⧇ execute āĻšā§ŸāĨ¤


đŸ§ĩ āϕ⧇āύ JavaScript āĻāϕ⧇ āĻāϕ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āĻ•āĻžāϰāĻŖ JavaScript Engine (āϝ⧇āĻŽāύ V8) āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻž Main Thread āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāĻ•āĻžāϰāϪ⧇āχ multi-tasking āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāχ Event Loop āĻĻāϰāĻ•āĻžāϰ āĻšā§ŸāĨ¤

đŸ§Ē āφāϰāĻ“ āĻ•āĻŋāϛ⧁ Terms āϜāĻžāύāϞ⧇ āĻ­āĻžāϞ⧋ āĻŦā§‹āĻāĻž āϝāĻžāĻŦ⧇:

Term
āĻ•āĻžāϜ

Microtask Queue

Promise, MutationObserver āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž queue

Macrotask Queue

setTimeout, setInterval, setImmediate āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āϜāĻ¨ā§āϝ

Job Queue Priority

Microtasks always execute before macrotasks

console.log("1");

setTimeout(() => {
  console.log("2");
}, 0);

Promise.resolve().then(() => {
  console.log("3");
});

console.log("4");

👉 Output āĻšāĻŦ⧇:

1
4
3
2

āĻ•āĻžāϰāĻŖ Promise.then() āϝāĻžāϝāĻŧ microtask queue āϤ⧇, āφāϰ āϏ⧇āϟāĻž priority higher than setTimeout (macrotask)āĨ¤


✅ āϏāĻ‚āĻ•ā§āώ⧇āĻĒ⧇ āĻŽāύ⧇ āϰāĻžāĻ–ā§‹:

🔸 Call Stack — āϏāϰāĻžāϏāϰāĻŋ āĻ•āĻžāϜ āĻāĻ–āĻžāύ⧇ āϚāϞ⧇ 🔸 Web APIs — async āĻ•āĻžāϜ āĻāĻ–āĻžāύ⧇ āĻšā§Ÿā§‡ callback āϤ⧈āϰāĻŋ āĻ•āϰ⧇ 🔸 Callback Queue — āĻ•āĻžāϜ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšā§Ÿā§‡ āĻŦāϏ⧇ āĻĨāĻžāϕ⧇ 🔸 Event Loop — āĻĻ⧇āϖ⧇ call stack āĻĢāĻžāρāĻ•āĻž āĻšāϞ⧇ āĻ•āĻžāϜ āϏāϰāĻŋāϝāĻŧ⧇ āφāύ⧇ 🔸 Microtasks āφāϗ⧇, āϤāĻžāϰāĻĒāϰ Macrotasks

Last updated