🔄 Most JS devs use the Event Loop every day — but few can explain how it actually works. Let me break it down simply. JavaScript is single-threaded — it can only do one thing at a time. So how does it handle things like API calls, timers, and clicks — all without freezing the page? That's where the Event Loop comes in. 👇 Think of it like a restaurant: The chef (JS engine) takes one order at a time. But the waiter (browser APIs) handles tasks like timers and fetching data in the background — and brings them back to the kitchen when ready. Here's what's happening under the hood: 📌 Call Stack — where your code runs, line by line 📌 Web APIs — handle async tasks (setTimeout, fetch, DOM events) 📌 Callback Queue — completed tasks wait here to be executed 📌 Microtask Queue — Promises land here — and they always run first 📌 Event Loop — the manager that keeps checking: "Is the stack empty? If yes, grab the next task." This is exactly why setTimeout(fn, 0) doesn't run immediately — it still waits its turn in the queue. And why Promise.then() always executes before a setTimeout — even if both are "ready" at the same time. Understanding the Event Loop helps you write faster, bug-free async code. #JavaScript #WebDevelopment #Programming #SoftwareEngineering #EventLoop #Frontend #100DaysOfCode
JavaScript Event Loop Explained
More Relevant Posts
-
"JS Fundamentals Series #4: Closures & First-Class Functions" Ever wondered how a function remembers variables even after its parent has finished executing? That's the magic of Closures - one of the most powerful concepts in JavaScript. 👉 Closures: A closure is formed when a function remembers the variables from its lexical environment, even after the outer function has returned. 👉 First-Class Functions: In JavaScript, functions are treated like any other value - they can be assigned to variables, passed as arguments, or returned from other functions 🔹Explanation - Closures combines a function with its surrounding scope. - They allow data privacy and state retention. - First-class functions make higher-order functions possible (functions that take or return another functions). 🔹 Example function outer() { let count = 0; return function inner() { count++; return count; } } const counter = outer(); console.log(counter()); // 1 console.log(counter()); // 2 Here, inner() remembers count even after outer() has finished — that’s a closure in action. 🔹Why It Matters - Enables powerful patterns like currying, memoization, and event handling. - Helps write modular, reusable, and maintainable code. - Essential for understanding modern frameworks like React. 💡 Takeaway: Closures aren’t just theory — they’re the backbone of how JavaScript manages state and builds advanced patterns. #JavaScript #WebDevelopment #Frontend #ReactJS #CodingTips #DeveloperCommunity #NamasteJS #LearningJourney #TechExplained #CareerGrowth "Closures: Functions carry their lexical environment with them 👇"
To view or add a comment, sign in
-
-
Hoisting in JavaScript (and TypeScript) - Explained So You’ll Never Forget Ever saw this weird behavior? console.log(a); // undefined var a = 10; OR even worse: sayHello(); // Works! function sayHello() { console.log("Hello!"); } How is JavaScript using things before they are declared? 👉 That’s called Hoisting 🏠 Real-Life Example: Hotel Reception Imagine you walk into a hotel… "var" — Pre-registered Guest 📝 Your name is already in the system, but your room is not ready yet. 👉 You exist… but not fully ready 👉 So you get "undefined" "let" / "const" — Walk-in Guest 🚶♂️ You are NOT in the system yet. 👉 Try to access before check-in? ❌ “Sir, you are not registered!” (This is called Temporal Dead Zone) "function" — VIP Guest ⭐ Your room is already booked and ready! 👉 You can directly go in 👉 That’s why functions work before declaration Behind the scenes (Simple terms): JavaScript does 2 steps: 1️⃣ Memory Allocation Phase → Variables & functions are stored 2️⃣ Execution Phase → Code runs line by line Key Takeaways: ✔ "var" is hoisted (initialized as "undefined") ✔ "let" & "const" are hoisted but NOT initialized ✔ Functions are fully hoisted Pro Tip: Avoid confusion → Always declare variables at the top (or just use "let" / "const" properly) 💬 Have you ever faced a bug because of hoisting? #JavaScript #TypeScript #WebDevelopment #Frontend #Coding #LearnToCode
To view or add a comment, sign in
-
-
#One_real_production_lesson_frontend_dev_taught_me: We had a bug in production where an API was getting called twice. At first, it looked like a backend issue. But the backend logs were clean. So I started digging into the frontend 👇 The culprit? 👉 React 18 Strict Mode. In development, React intentionally runs components twice to detect side effects. But our code wasn’t written with that in mind. Here’s what we had: ❌ API call inside "useEffect" without proper safeguards ❌ No cleanup / idempotent logic ❌ Assumption: "useEffect runs only once" Result: Duplicate API calls → inconsistent data → confused users. --- ✅ Fix: - Made API calls idempotent - Added proper checks before firing requests - Avoided unnecessary side effects inside "useEffect" --- 💡 Lesson: Writing code that works is easy. Writing code that works in real-world scenarios is the real skill. React doesn’t cause bugs. Our assumptions do. --- Since then, I always ask: 👉 “What happens if this runs twice?” 👉 “Is this safe in concurrent rendering?” --- Still learning something new every day 🚀 #FrontendDevelopment #ReactJS #JavaScript #CleanCode #WebDevelopment #Debugging
To view or add a comment, sign in
-
🧠 The JavaScript Event Loop Explained Like a Restaurant Imagine a restaurant with one chef. The chef can only cook one dish at a time (like JavaScript being single-threaded). But customers keep placing orders. So what happens? 1️⃣ The chef starts cooking the current dish (Call Stack) 2️⃣ Other orders are taken by assistants (Web APIs) 3️⃣ Finished orders wait on the counter (Callback Queue) 4️⃣ When the chef finishes the current dish, the Event Loop gives him the next order. This is how JavaScript handles multiple tasks without blocking the program. Quick example: console.log("Order 1"); setTimeout(() => { console.log("Order 2"); }, 1000); console.log("Order 3"); Output: Order 1 Order 3 Order 2 Even though Order 2 was placed earlier, it waits until the stack is free. 📌 The Event Loop is what makes JavaScript asynchronous and powerful. #javascript #webdevelopment #coding #frontenddeveloper #learningjavascript
To view or add a comment, sign in
-
-
Things I wish someone had drawn out for me when I was starting with JavaScript. A lot of engineers write JS for years without really knowing what happens after they hit run. How does the code actually execute? What's the JS engine doing? Why does async code behave the way it does? Why does setTimeout sometimes feel unpredictable? It all makes sense once you see the full picture. Here's what these notes cover: The JS Runtime Environment — engine, call stack, memory heap, and how execution contexts are created and destroyed. The Event Loop, how it continuously monitors the call stack and decides what runs next. Callback Queue vs Microtask Queue, why Promises behave differently from setTimeout, and why microtasks always go first. JIT Compilation, how V8 interprets and optimises your code on the fly. Web APIs and the Browser, where setTimeout, DOM APIs, fetch, and localStorage actually live. Once this clicked for me, a lot of "weird" JavaScript behaviour stopped feeling weird. If you're learning JS right now, save this. Come back to it when async starts feeling confusing. What part of JavaScript took you the longest to truly understand? #JavaScript #WebDevelopment #Frontend #LearnToCode
To view or add a comment, sign in
-
-
💡 useEffect Dependencies — Small Array, BIG Difference! One hook… three different behaviors — all based on the dependency array 🤯 Understanding this can save you from bugs and unnecessary re-renders! Let’s break it down 👇 🔹 1. No Dependency Array useEffect(() => { console.log("Runs on every render"); }); 👉 Runs after every render 👉 Can cause performance issues if not handled carefully 🔹 2. Empty Dependency Array [] useEffect(() => { console.log("Runs only once"); }, []); 👉 Runs only once (on mount) 👉 Perfect for: API calls Initial setup 🔹 3. With Dependencies [value] useEffect(() => { console.log("Runs when value changes"); }, [value]); 👉 Runs only when specific values change 👉 Best for syncing state, props, or side effects 🔁 Quick Summary No array → Every render [] → Only once [deps] → When dependencies change ⚠️ Common Mistake Forgetting dependencies can lead to: Stale data Unexpected bugs 👉 Always trust (and understand!) the dependency array. 🚀 Final Thought Mastering useEffect dependencies is the key to writing predictable and efficient React code. Once you get this right, everything starts making sense 🙌 #ReactJS #FrontendDevelopment #JavaScript #WebDevelopment #CodingTips
To view or add a comment, sign in
-
Late post, but no skipped week. Week 3 of my full stack journey was a lot: → React Part I - JSX, Virtual DOM, first components → Async JS - Promises, async/await, Fetch API, built a Film Finder with a live API → JavaScript Testing - Mocha, TDD, writing tests before writing code → JS Classes, Modules & Error Handling - the building blocks of real, organized codebases The shift this week wasn't just new syntax. It was starting to see how production code is actually structured: modular, tested, asynchronous, component-driven. React in particular hit different. Going from "here's a webpage" to "here's a component" rewires how you think about building UIs. Week 4 is already underway. More soon. If you're on a similar path, let's connect! #React #JavaScript #AsyncJS #TDD #FullStackDevelopment #WebDevelopment #LearningInPublic #SoftwareEngineering #CareerChange
To view or add a comment, sign in
-
🔍 JavaScript Bug You Might Have Seen (setTimeout vs Promise) You write this code: console.log("Start"); setTimeout(() => { console.log("Timeout"); }, 0); Promise.resolve().then(() => { console.log("Promise"); }); console.log("End"); What do you expect? Start Timeout Promise End But actual output is: Start End Promise Timeout This happens because of the Event Loop 📌 What is the Event Loop? 👉 The event loop is the mechanism that decides which task runs next in JavaScript’s asynchronous execution. 📌 Priority order (very important): 1️⃣ Call Stack (synchronous code) 2️⃣ Microtask Queue 3️⃣ Macrotask Queue 📌 What’s inside each queue? 👉 Microtask Queue (HIGH priority): ✔ Promise.then / catch / finally ✔ queueMicrotask ✔ MutationObserver 👉 Macrotask Queue (LOWER priority): ✔ setTimeout ✔ setInterval ✔ setImmediate ✔ I/O tasks ✔ UI rendering events Execution flow: ✔ Step 1: Run all synchronous code 👉 Start → End ✔ Step 2: Execute ALL microtasks 👉 Promise ✔ Step 3: Execute macrotasks 👉 setTimeout So final order becomes: Start End Promise Timeout 💡 Takeaway: ✔ Microtasks run before macrotasks ✔ Promises > setTimeout ✔ setTimeout(fn, 0) is NOT immediate 👉 Understand queues = master async JS 🔁 Save this for later 💬 Comment “event loop” if this made sense ❤️ Like for more JavaScript deep dives #javascript #frontend #codingtips #webdevelopment #js #developer
To view or add a comment, sign in
-
🚀 𝗨𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱𝗶𝗻𝗴 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗖𝗹𝗼𝘀𝘂𝗿𝗲𝘀 (The Secret Locker Story 😂) Ever felt like JavaScript remembers things even after they’re gone? 👀 Well… it actually does 😎 Let me explain 𝗖𝗹𝗼𝘀𝘂𝗿𝗲𝘀 in the simplest (and funniest) way 👇 🔐 1. Create a Locker with a Secret /* JavaScript * / function createLocker() { let secret = "💰 1 Crore Password"; return function() { console.log(secret); }; } JS be like: “Okay… I’ll keep this secret safe 🤫” 🎁 𝗧𝗮𝗸𝗲 𝘁𝗵𝗲 𝗟𝗼𝗰𝗸𝗲𝗿 𝗞𝗲𝘆 /* JavaScript * / const myLocker = createLocker(); Now the outer function is gone… finished… bye bye 👋 😳 𝗦𝗲𝗰𝗿𝗲𝘁 𝗔𝗯𝗵𝗶 𝗕𝗵𝗶 𝗟𝗶𝘃𝗲 𝗛𝗮𝗶 /* JavaScript * / myLocker(); // 💰 1 Crore Password JS says: “Function gaya toh kya hua… memory toh mere paas hai 😎” 🧠 𝗪𝗵𝗮𝘁 𝗷𝘂𝘀𝘁 𝗵𝗮𝗽𝗽𝗲𝗻𝗲𝗱? 👉 Inner function remembers outer function’s variables 👉 Even after outer function is finished 👉 This is called a Closure 😂 𝗥𝗲𝗮𝗹-𝗟𝗶𝗳𝗲 𝗔𝗻𝗮𝗹𝗼𝗴𝘆 It’s like: 👩 Mom hides sweets in a locker 🍫 🔑 Gives you the key 🏠 Leaves the house And you’re like: “अब तो मज़े ही मज़े 😎” ⚠️ 𝗜𝗺𝗽𝗼𝗿𝘁𝗮𝗻𝘁 𝗣𝗼𝗶𝗻𝘁 /* JavaScript * / const locker1 = createLocker(); const locker2 = createLocker(); 👉 Both lockers have their own secret (No sharing bro ❌😆) 💼 𝗜𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗢𝗻𝗲-𝗟𝗶𝗻𝗲𝗿 Closure = A function that remembers variables from its outer scope even after the outer function has executed. 🔥 𝗡𝗼𝘄 𝘆𝗼𝘂𝗿 𝘁𝘂𝗿𝗻! Can you think of real use cases of closures? Drop in comments 👇👇 #JavaScript #WebDevelopment #Frontend #Coding #Programming #Developers #LearnToCode #Tech #SoftwareEngineering #ReactJS #100DaysOfCode #CodingLife
To view or add a comment, sign in
-
https://lnkd.in/dpPxiwHY — I spent years manually squinting at code changes before I decided to build a better way as a Frontend Engineer. When you’re working with complex TypeScript files, a simple visual check isn't enough to catch those hidden bugs. I built this Diff Checker to handle the heavy lifting that standard text editors sometimes overcomplicate. For the foundation, I went with Next.js 15. The speed is incredible for a tool that needs to be snappy and SEO-friendly. I used TypeScript to ensure every character comparison was type-safe, preventing those annoying crashes during large file comparisons. One of my favorite parts of the build was using Biome. It kept the codebase incredibly clean without the overhead of traditional linting tools. I actually remember a project where I accidentally merged two versions of a config file because I didn't have a quick way to compare them side-by-side. That 2-hour debugging nightmare was the catalyst for adding this to my platform. 😅 The UI is powered by Tailwind CSS to keep it lightweight and responsive across all my 300+ tools. To make sure the diffing logic was bulletproof, I ran extensive end-to-end tests using Playwright. I even leveraged Cursor to help me optimize the diffing algorithm for better performance on massive text blocks. Development was lightning fast thanks to Vite, making the iteration loop almost instant. It’s not just a calculator; it’s about making our daily dev workflow less error-prone and more efficient. 🚀 Do you still rely on your IDE for diffs, or do you prefer a dedicated web tool for a quick check? #DiffChecker #FrontendEngineer #TypeScript #ReactJS #WebDev #NextJS #CodingTools #JavaScript #SoftwareEngineering #TailwindCSS #ViteJS #Programming #CodeReview #WebPerformance #DeveloperExperience
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development