How React Uses Closures (And Why It Matters) ⚛️ Closures aren’t just a JavaScript interview topic. React uses them everywhere. First, quick recap 👇 A closure happens when a function “remembers” variables from its outer scope — even after that outer function has finished executing. Now let’s connect this to React. 1️⃣ Event Handlers Use Closures When you write: function Counter() { const [count, setCount] = useState(0); function handleClick() { console.log(count); } return <button onClick={handleClick}>Click</button>; } handleClick remembers count. That’s a closure. Even after rendering, the function still has access to the state from that render. 2️⃣ Each Render Creates New Closures Important concept 👇 Every time a component re-renders: • A new function is created • A new closure is created • It “captures” the state of that render This is why sometimes you see stale state bugs. The function remembers the old value. 3️⃣ Why Dependency Arrays Matter In useEffect, React relies on closures too. If you don’t include dependencies: • The effect keeps using the old closure • It won’t see updated values That’s why ESLint warns you. Big Insight 🚀 React doesn’t “magically update” variables inside functions. Each render is like a snapshot. Closures capture that snapshot. Once you understand this, concepts like: • useEffect • useCallback • Stale state • Re-renders become much clearer. Strong JavaScript fundamentals make React easier ⚛️ #React #JavaScript #Closures #FrontendDevelopment #LearningInPublic
Aman Raj’s Post
More Relevant Posts
-
🚀 Understanding the JavaScript Event Loop — The Secret Behind Async JavaScript One of the most common questions in JavaScript interviews and real-world debugging is: “Why does JavaScript execute asynchronous code in a specific order?” The answer lies in the JavaScript Event Loop. JavaScript is single-threaded, meaning it can execute only one task at a time. Yet we can run asynchronous operations like API calls, timers, and promises without blocking the main thread. This is possible because of the Event Loop architecture. Let’s break it down 👇 🔹 1. Call Stack (Synchronous Execution) The Call Stack is where JavaScript executes synchronous code line by line. Every function call is pushed onto the stack and removed once executed. 🔹 2. Web APIs (Browser Features) When JavaScript encounters asynchronous operations like: setTimeout() fetch() DOM events They are handed off to Web APIs provided by the browser. 🔹 3. Task Queues There are two important queues: ✅ Microtask Queue (High Priority) Includes: Promise.then() queueMicrotask() MutationObserver These tasks execute immediately after the current call stack is empty. ✅ Macrotask Queue (Lower Priority) Includes: setTimeout() setInterval() DOM events These tasks run only after all microtasks are completed. 🔹 4. The Event Loop The Event Loop continuously checks: 1️⃣ Is the Call Stack empty? 2️⃣ Execute all Microtasks first 3️⃣ Then execute the next Macrotask It repeats this process indefinitely. 💡 Example console.log(1); setTimeout(() => console.log(2), 0); Promise.resolve().then(() => console.log(3)); console.log(4); 👉 Output: 1 4 3 2 Why? 1 and 4 run in the Call Stack Promise.then() goes to the Microtask Queue setTimeout() goes to the Macrotask Queue Microtasks run before macrotasks 📌 Execution Order: Call Stack → Microtasks → Macrotasks 🔥 Key Takeaway Understanding the Event Loop helps you: Debug asynchronous issues Write better non-blocking code Perform well in JavaScript interviews Master frameworks like React, Node.js, and Next.js #JavaScript #WebDevelopment #FrontendDevelopment #AsyncProgramming #EventLoop #Programming #Coding #SoftwareEngineering
To view or add a comment, sign in
-
-
🚀 Call by Value vs Call by Reference — Every JavaScript Developer Must Understand This One of the most commonly asked interview questions — yet many developers explain it incorrectly. Let’s simplify it 👇 🔹 Call by Value When you pass a primitive type (number, string, boolean, null, undefined, symbol, bigint), JavaScript copies the value. let a = 10; function update(x) { x = 20; } update(a); console.log(a); // 10 👉 The original variable does NOT change. Because a copy was passed. 🔹 Call by Reference (Not Exactly 😉) When you pass an object, array, or function, JavaScript passes the reference to the memory location. let user = { name: "Sweta" }; function update(obj) { obj.name = "Anita"; } update(user); console.log(user.name); // Anita 👉 The original object changes. Because both variables point to the same memory reference. ⚠️ Important Clarification JavaScript is technically: ✅ Pass by Value But for objects, the value itself is a reference. That’s why many people say “call by reference” — but internally it’s still pass-by-value (of the reference). 🔥 Real Interview Tip If interviewer asks: “Is JavaScript pass by value or pass by reference?” Best answer: JavaScript is pass-by-value. For objects, the value being passed is a reference to the object. 🎯 This shows conceptual clarity. 💡 Why This Matters in Real Projects? Prevents accidental state mutation in React/Vue Helps avoid bugs in Redux/Pinia Essential for understanding immutability Critical when working with micro-frontends & shared state Understanding this deeply makes you a better JavaScript engineer — not just someone who writes syntax. #JavaScript #FrontendDevelopment #ReactJS #VueJS #InterviewPreparation #WebDevelopment
To view or add a comment, sign in
-
JavaScript Notes: From Fundamentals to Advanced Concepts (Interview & Production Ready) These JavaScript notes are a structured, practical, and interview-oriented collection of concepts that every frontend and full-stack developer must understand deeply, not just memorize. Instead of surface-level definitions, these notes focus on how JavaScript actually works under the hood, why certain bugs occur, and how JS behaviour affects React performance, scalability, and real-world production applications. The content is built from: Real interview questions Debugging experience from real projects Common mistakes developers make even after years of experience What these notes cover JavaScript Fundamentals Execution context & call stack Scope, lexical environment & scope chain var, let, const (memory & hoisting differences) Hoisting explained with execution flow Core JavaScript Concepts this keyword (implicit, explicit, arrow functions) Closures (memory behaviour & real use cases) Prototypes & prototypal inheritance Shallow vs deep copy Reference vs value Asynchronous JavaScript Callbacks & callback hell Promises (microtask queue behaviour) Async/Await (what actually pauses execution) Event loop, microtasks vs macrotasks Real execution order questions asked in interviews Advanced & Interview-Critical Topics Debouncing & throttling Currying & function composition Polyfills (map, filter, reduce, bind) Equality operators (== vs ===) Memory leaks & garbage collection basics JavaScript for React Developers Closures inside hooks Reference equality & re-renders Immutability & state updates Async state behaviour Performance pitfalls caused by JS misunderstandings #ReactJS #JavaScriptForReact #FrontendPerformance #Hooks #WebDevelopers
To view or add a comment, sign in
-
Understanding the JavaScript Event Loop is a game changer for writing efficient asynchronous code. Many developers use setTimeout and Promise daily — but fewer truly understand what happens behind the scenes. Here’s a quick breakdown 👇 🔹 JavaScript is single-threaded 🔹 Synchronous code runs first (Call Stack) 🔹 Then all Microtasks execute (Promises, queueMicrotask) 🔹 Then one Macrotask runs (setTimeout, setInterval, DOM events) 🔹 The loop repeats 📌 Execution Priority: Synchronous → Microtasks → Macrotasks Example: console.log(1); setTimeout(() => console.log(2), 0); Promise.resolve().then(() => console.log(3)); console.log(4); ✅ Output: 1 → 4 → 3 → 2 Understanding this helps in: ✔ Debugging async issues ✔ Optimizing performance ✔ Writing better React applications ✔ Cracking frontend interviews I’ve created a simple infographic to visually explain the entire Event Loop process. If you're preparing for JavaScript or React interviews, mastering this concept is essential. 💬 Now Your Turn 👇 What will be the output of this code? console.log("A"); setTimeout(() => console.log("B"), 0); Promise.resolve().then(() => { console.log("C"); }); console.log("D"); 👨💻 Follow for daily React, and JavaScript 👉 Arun Dubey Drop your answer in the comments 👇 Let’s see who really understands the Event Loop 🔥 #JavaScript #FrontendDevelopment #ReactJS #WebDevelopment #EventLoop #CodingInterview
To view or add a comment, sign in
-
-
Day 13: Promise APIs in JavaScript (Promise.all, race, allSettled, any) If you really want to master async JavaScript, you must understand the Promise APIs 💡 JavaScript gives us powerful methods to handle multiple promises. 🔹 1️⃣ Promise.all() 👉 Waits for all promises to succeed 👉 Fails immediately if any one fails Promise.all([api1(), api2(), api3()]) .then(results => console.log(results)) .catch(error => console.log(error)); ✅ Best when all results are required ❌ One failure = everything fails 🔹 2️⃣ Promise.race() 👉 Returns the first promise that settles (resolve or reject) Promise.race([api1(), api2(), api3()]) .then(result => console.log(result)) .catch(error => console.log(error)); ✅ Useful for timeout logic 🔹 3️⃣ Promise.allSettled() 👉 Waits for all promises 👉 Returns status of each (fulfilled/rejected) Promise.allSettled([api1(), api2()]) .then(results => console.log(results)); ✅ Useful when you want all results, even if some fail 🔹 4️⃣ Promise.any() 👉 Returns the first fulfilled promise 👉 Ignores rejected ones Promise.any([api1(), api2()]) .then(result => console.log(result)) .catch(error => console.log(error)); ✅ Best when you only need one successful response 🔥 Quick Summary • Promise.all → All must succeed • Promise.race → First settled wins • Promise.allSettled → Get all results • Promise.any → First success wins 🧠 Why Important? ✔️ Used in real-world APIs ✔️ Common frontend interview question ✔️ Helps optimize async performance #JavaScript #Promises #AsyncJavaScript #webdevelopment #LearnInPublic
To view or add a comment, sign in
-
🚀 Implemented Promise.all & Promise.allSettled from Scratch (Polyfills) Recently, I deep-dived into JavaScript internals and implemented custom polyfills for: ✅ Promise.all ✅ Promise.allSettled Why? Because understanding how these combinators work internally separates surface-level JS knowledge from real engine-level understanding. 🔥 Key Learnings 🔹 1. Order Preservation is Critical Even if promises resolve at different times, results must match the input order. Using valueArray[index] = result ensures correct alignment. 🔹 2. Immediate Rejection in Promise.all If any promise rejects: The entire Promise.all should reject immediately. Remaining promises still execute, but the outer promise is already settled. 🔹 3. Promise.allSettled Never Rejects Unlike Promise.all, allSettled: Waits for all promises Returns structured results: { status: "fulfilled", value } { status: "rejected", reason } 🔹 4. Handling Edge Cases Empty array → resolve immediately Mixed resolved + rejected promises Maintaining parallel execution Avoiding race condition issues 💡 Why This Matters This isn’t just about writing code that works. It’s about: Understanding async control flow Mastering the event loop mental model Writing spec-accurate implementations Thinking like a JavaScript engine These are exactly the kind of deeper JavaScript concepts discussed in high-level frontend interviews at strong product companies. 🧠 Takeaway If you can implement: Promise.all Promise.allSettled Correctly handling: Order Early rejection Edge cases Status formatting You’re no longer just using JavaScript. You’re understanding how it works under the hood. #JavaScript #FrontendDevelopment #AsyncJavaScript #Promises #WebDevelopment #InterviewPrep #SoftwareEngineering
To view or add a comment, sign in
-
-
New Blog Published: Handling Multiple Promises in JavaScript (Promise.all(), Promise.any(), Promise.allSettled()) Ever wondered how JavaScript handles multiple asynchronous operations at the same time? In real-world applications we often run many async tasks together like fetching APIs, loading resources, or uploading files. Choosing the right Promise method can make your code much cleaner and more efficient. In this blog, I break down: Why JavaScript needs Promises for asynchronous tasks When to use Promise.all() When Promise.any() is the right choice When Promise.allSettled() becomes useful Real-life analogies and practical examples for better understanding Written in a simple way for developers who want to understand when and why to use these methods in real projects and interviews. 🔗 Read here: https://lnkd.in/gbXvwWdJ Thanks to Hitesh Choudhary sir and Piyush Garg sir, for providing this type of knowledge of web browser internal. #JavaScript #WebDevelopment #AsyncProgramming #Promises #ChaiCode
To view or add a comment, sign in
-
🚀 20 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗤𝘂𝗲𝘀𝘁𝗶𝗼𝗻𝘀 𝗧𝗵𝗮𝘁 𝗖𝗮𝗻 𝗛𝗲𝗹𝗽 𝗬𝗼𝘂 𝗖𝗿𝗮𝗰𝗸 𝗙𝗿𝗼𝗻𝘁𝗲𝗻𝗱 𝗜𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄𝘀 If you’re preparing for frontend roles, make sure you’re confident with these core JavaScript concepts: 1. What are higher-order functions in JavaScript, and can you give an example? 2. What is destructuring in JavaScript, and why is it useful? 3. What are template literals, and how do they improve string handling? 4. How does the spread operator (…) work? 5. What is the rest parameter, and how is it different from the arguments object? 6. What is the difference between an object and an array? 7. How do you properly clone an object or an array? 8. What do Object.keys(), Object.values(), and Object.entries() do? 9. How does the map() method work, and when should you use it? 10. What is the difference between map() and forEach()? 11. What is event delegation, and why is it powerful? 12. What are JavaScript modules, and how do import/export work? 13. What is the prototype chain, and how does inheritance happen in JavaScript? 14. What is the difference between bind(), call(), and apply()? 15. How does JavaScript handle equality comparisons (== vs ===)? 16. What is the DOM, and how does JavaScript interact with it? 17. How do you prevent default behavior and stop event propagation? 18. What is the difference between synchronous and asynchronous code? 19. What is the difference between a native event object and a custom event? 20. How do you optimize performance in JavaScript applications? If you can clearly explain these concepts with examples, you’re in a strong position for most frontend interviews. #JavaScript #FrontendDevelopment #WebDevelopment #InterviewPreparation #ReactJS #SoftwareDevelopment
To view or add a comment, sign in
-
-
JavaScript is easy to start with - but surprisingly hard to truly understand. Many developers can write JavaScript. Far fewer understand what actually happens under the hood. And that difference is often what separates someone who just writes code from someone who can truly reason about it. Here are a few core JavaScript internals every developer should understand: 🔹 Execution Context & Call Stack JavaScript code runs inside execution contexts. Each function call creates a new execution context that gets pushed onto the call stack. Understanding this explains recursion behavior, stack overflows, and how scope is resolved during execution. 🔹 Event Loop JavaScript itself runs on a single thread, but asynchronous behavior is enabled by the runtime (e.g., the browser or Node.js). The event loop coordinates the call stack, task queue (macrotasks), and microtask queue (Promises, queueMicrotask, etc.) to decide when callbacks are executed. 🔹 Closures A closure occurs when a function retains access to variables from its lexical scope, even after the outer function has finished executing. Closures are widely used for encapsulation, stateful functions, and many library/framework patterns. 🔹 Prototypes & Inheritance JavaScript uses prototype-based inheritance. Objects can inherit properties and methods through the prototype chain. Even modern "class" syntax is syntactic sugar on top of this mechanism. 🔹 Hoisting During the creation phase of an execution context, declarations are processed before code execution. Function declarations are fully hoisted, while "var" is hoisted but initialized with "undefined". "let" and "const" are hoisted but remain in the Temporal Dead Zone until initialization. 🔹 The "this" keyword "this" is determined by how a function is called, not where it is defined. Its value depends on the call-site (method call, constructor call, explicit binding with "call/apply/bind", or arrow functions which capture "this" lexically). Once you understand these mechanics, JavaScript stops feeling "magical" - and becomes far more predictable. What JavaScript concept took you the longest to fully understand? #javascript #webdevelopment #softwareengineering #frontend
To view or add a comment, sign in
-
-
One of the most important (and often confusing) concepts in JavaScript is the Execution Context. Whenever JavaScript runs your code, it does not execute it line by line immediately. Instead, it creates an Execution Context, which happens in two phases: 1️⃣ Memory Creation Phase (Hoisting Phase) • Variables are allocated memory • Functions are stored fully in memory • var variables are initialized with undefined Eg: console.log(a); // undefined var a = 10; 2️⃣ Code Execution Phase • JavaScript assigns actual values to variables • Executes function calls line by line ⸻ 🧠 Types of Execution Contexts 1. Global Execution Context • Created first • Associated with the global object (window in browsers) 2. Function Execution Context • Created whenever a function is invoked • Each function call gets its own context 3. Eval Execution Context (rarely used) ⸻ 📦 Call Stack • JavaScript uses a Call Stack to manage execution contexts • LIFO (Last In, First Out) • Helps JS know which function to execute and return from ⸻ 💡 Why this matters? Understanding Execution Context helps you master: • Hoisting • Scope & Closures • this keyword • Debugging tricky bugs • Writing better, predictable JavaScript If you’re preparing for JavaScript or React interviews, this concept is a must-know 🔥 #JavaScript #WebDevelopment #Frontend #ReactJS #ExecutionContext #InterviewPrep #JSConcepts
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