🧩 JavaScript Output-Based Question (this + setTimeout) ❓ What will be the output? 👉 Comment your answer below (Don’t run the code ❌) Output: undefined 🧠 Why this output comes? (Step-by-Step) 1️⃣ print() is called as a method obj.print(); So inside print, this correctly refers to obj. 2️⃣ But inside setTimeout… setTimeout(function () { console.log(this.name); }, 0); The callback is a regular function, not a method of obj. When it executes: • this does NOT refer to obj • In non-strict mode → this points to the global object • In strict mode → this is undefined Either way: this.name → undefined 3️⃣ The key mistake ❌ Assuming this is preserved automatically in async callbacks 🔑 Key Takeaways ✔️ this depends on how a function is called ✔️ setTimeout callbacks lose object context ✔️ Use arrow functions or .bind() to fix this ✔️ This bug appears frequently in real projects #JavaScript #ThisKeyword #AsyncJavaScript #setTimeout #InterviewQuestions #FrontendDeveloper #MERNStack #ReactJS
JavaScript this Keyword Behavior in setTimeout
More Relevant Posts
-
Ever wondered how JavaScript remembers variables even after a function has finished execution? It's The magic of Closure. A closure gives a function access to its outer scope. In JavaScript, closures are created every time a function is created, at function creation time. Example: function outer() { let count = 0; return function inner() { count++; console.log(count); }; } const counter = outer(); counter(); Result => 1 counter(); Result => 2 counter(); Result => 3 Explanation: Inner function remembers count from outer. Every time you call counter(), it retains the previous value. Usefulness of Closure: => Data encapsulation (private variables) => Memoization / caching => Event handlers & async callbacks Do you use closures in your projects? Share your use case below! #JavaScript #WebDevelopment #Closures #ReactJS #NexjJS #MERNStack #CodingTips
To view or add a comment, sign in
-
-
JavaScript Event Loop – Simple Explanation JavaScript is single-threaded. It can do only one task at a time. So how does it handle async tasks like: setTimeout fetch Promises 👉 Answer: Event Loop 🧠 Step by Step: 1️⃣ Synchronous code runs in the Call Stack 2️⃣ Async tasks go to Web APIs 3️⃣ When completed: Promises → Microtask Queue (High Priority) setTimeout → Callback Queue (Low Priority) 4️⃣ Event Loop checks: If Call Stack is empty → First runs Microtasks → Then runs Callback tasks Example: console.log("Start"); setTimeout(() => console.log("Timeout"), 0); Promise.resolve().then(() => console.log("Promise")); console.log("End"); ✅ Output: Start End Promise Timeout Because Promises run before setTimeout 🔥 Understanding Event Loop = Strong JavaScript foundation 💪 #JavaScript #Frontend #ReactJS #WebDevelopment #CodingInterview
To view or add a comment, sign in
-
-
The JavaScript "this" Trap 🪤🔥 The Puzzle: What is the output? 🤔 const obj = { name: "JS", getName() { console.log(this.name); } }; const fn = obj.getName; fn(); Output: undefined Why? 🧠 In JavaScript, this depends on HOW a function is called, not where it is written. Lost Context: const fn = obj.getName only copies the function reference. Standalone Call: When you call fn(), there is no object (no dot) before the function. Global Context: It now runs in the Global Context (window object). Since window.name is not "JS", it returns undefined. How to Fix? 🛠️ ✅ Use .bind(): const fn = obj.getName.bind(obj); ✅ Use .call(): fn.call(obj); ✅ Use Arrow Functions: They inherit this from the surrounding scope. Interview Tip: 💡 Always check the "Call Site." No dot before the function call (like fn()) usually means this is lost! #JavaScript #CodingTips #365DaysOfCode #InterviewPrep #WebDev #FullStack #mern #react #node
To view or add a comment, sign in
-
JavaScript Output-Based Question (this + setTimeout) What will be the output? Comment your answer below (Don’t run the code) Output: undefined Why this output comes? (Step-by-Step) print() is called as a method. So inside print, this correctly refers to obj. But inside setTimeout… The callback is a regular function, not a method of obj. When it executes: • this does NOT refer to obj • In non-strict mode → this points to the global object • In strict mode → this is undefined Either way: this.name → undefined The key mistake Assuming this is preserved automatically in async callbacks. Key Takeaways ✔ this depends on how a function is called ✔ setTimeout callbacks lose object context ✔ Use arrow functions or bind to fix this ✔ This bug appears frequently in real projects Async code doesn’t preserve this by default. How would you fix this so it prints "JS"? Drop your solution in comments #JavaScript #ThisKeyword #InterviewQuestions #FrontendDeveloper #MERNStack
To view or add a comment, sign in
-
-
⚡ call() vs apply() vs bind() – Real Difference In JavaScript, these three methods are used to explicitly control the value of this inside a function. 🔹 call() Executes the function immediately Arguments are passed comma separated 🔹 apply() Executes the function immediately Arguments are passed as an array 🔹 bind() Does NOT execute the function immediately Returns a new function with a bound this value ✅ Quick Summary ✔ Use call() when you need to invoke a function immediately with comma separated arguments ✔ Use apply() when you need to invoke a function immediately with an array of arguments ✔ Use bind() when you need to create a new function with a fixed this value 💡 Pro Tip: call(), apply() and bind() are mainly used to explicitly set the value of this inside a function. #JavaScript #WebDevelopment #Frontend #JSConcepts #Coding #LearnToCode
To view or add a comment, sign in
-
-
🌀 Understanding the JavaScript Event Loop JavaScript is single-threaded, yet it handles asynchronous tasks efficiently—and the Event Loop is the reason why. This diagram breaks down how synchronous code runs in the Call Stack, while async operations move through Web APIs, Microtask Queue, and Macrotask Queue. 🔹 Microtasks (Promises, queueMicrotask) always run before macrotasks 🔹 Macrotasks (setTimeout, DOM events) wait for the next loop cycle 🔹 The Event Loop continuously checks the call stack and queues to decide what runs next That’s why the output order becomes 1 → 4 → 3 → 2, not what many beginners expect. Mastering this concept is key to writing efficient, bug-free JavaScript and excelling in interviews 🚀 #JavaScript #EventLoop #WebDevelopment #Frontend #AsyncJavaScript #LearningJS
To view or add a comment, sign in
-
-
🚀 JavaScript Timing Insights: Understanding setTimeout Delay ⏳ Did you know that the delay you pass to setTimeout is just a minimum wait time, not a guaranteed execution time? 🔍 The actual time before your callback runs = delay + current call stack time + microtask processing + browser overhead What does that mean? Even setTimeout(fn, 0) doesn’t run immediately — it waits for the current synchronous code (call stack) and all microtasks (like Promises) to finish first. Browser policies, inactive tabs, and internal overhead add more variability. So, setTimeout is more like “execute no sooner than” rather than an exact timer. 💡 This is crucial to understand when writing async JavaScript code, especially for performance tuning and timing-critical operations. The microtask queue always drains before the task queue—impacting when your timeout callback runs. Understanding this helps you write smoother, more predictable async code! 🔧✨ #JavaScript #WebDevelopment #AsyncProgramming #EventLoop #CodingTips #Frontend #DeveloperInsights
To view or add a comment, sign in
-
-
“JavaScript is easy.” Until this happens… 🤐 console.log(1 + "11") 👉 111 😵 Wait… what? Here’s what’s happening 👇 In JavaScript, the `+` operator does TWO jobs: ➕ Math addition ➕ String concatenation If one operand is a string, JavaScript silently converts the other one into a string too. So: 1 + "11" becomes "1" + "11" = "111" This is called **Type Coercion** (implicit conversion). 🔄 And that’s just the beginning… JavaScript also has something called - Truthy & Falsy values 👇 Falsy values (remember: FUNN0""): ❌ false ❌ undefined ❌ null ❌ NaN ❌ 0 ❌ "" (empty string) Everything else? ✅ Truthy. That’s why: if ("0") { console.log("Runs") } 👉 It runs 😅 Because "0" is a string — and it's truthy. JavaScript isn’t hard. But it’s full of silent behavior that can trick you. Have you ever been stuck because of type coercion? 👇 Comment your weirdest JS bug. #JavaScript #WebDev #Frontend #CodingTips #JSLearning
To view or add a comment, sign in
-
-
𝗪𝗲𝗹𝗰𝗼𝗺𝗲 𝘁𝗼 𝗗𝗮𝘆 𝟴 Have you ever seen JavaScript behave correctly… but still give the wrong output? 🤔 𝘉𝘦𝘧𝘰𝘳𝘦 𝘴𝘤𝘳𝘰𝘭𝘭𝘪𝘯𝘨, 𝘨𝘶𝘦𝘴𝘴 𝘵𝘩𝘦 𝘰𝘶𝘵𝘱𝘶𝘵 𝘰𝘧 𝘵𝘩𝘪𝘴 𝘴𝘪𝘮𝘱𝘭𝘦 𝘤𝘰𝘥𝘦 𝚏𝚘𝚛 (𝚟𝚊𝚛 𝚒 = 𝟷; 𝚒 <= 𝟹; 𝚒++) { 𝚜𝚎𝚝𝚃𝚒𝚖𝚎𝚘𝚞𝚝(() => { 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕𝚘𝚐(𝚒); }, 𝟷𝟶𝟶𝟶); } 𝗘𝘅𝗽𝗹𝗲𝗰𝘁𝗲𝗱 1, 2, 3 𝗔𝗰𝘁𝘂𝗮𝗹𝗹𝘆 𝗿𝗲𝘀𝘂𝗹𝘁 4,4,4 𝗧𝗵𝗶𝘀 𝗶𝘀 𝗮 𝗰𝗹𝗼𝘀𝘂𝗿𝗲 𝗯𝘂𝗴 — 𝗼𝗻𝗲 𝗼𝗳 𝘁𝗵𝗲 𝗺𝗼𝘀𝘁 𝗰𝗼𝗺𝗺𝗼𝗻 (𝗮𝗻𝗱 𝗰𝗼𝗻𝗳𝘂𝘀𝗶𝗻𝗴) 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗽𝗶𝘁𝗳𝗮𝗹𝗹𝘀. 𝗪𝗵𝘆 𝗧𝗵𝗶𝘀 𝗛𝗮𝗽𝗽𝗲𝗻𝘀 • var is function-scoped • setTimeout creates a closure • All callbacks reference the same variable i • When they execute, the loop has already finished Closures don’t capture values — they capture references. 𝗧𝗵𝗲 𝗙𝗶𝘅 𝚏𝚘𝚛 (𝚕𝚎𝚝 𝚒 = 𝟷; 𝚒 <= 𝟹; 𝚒++) { 𝚜𝚎𝚝𝚃𝚒𝚖𝚎𝚘𝚞𝚝(() => { 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕𝚘𝚐(𝚒); }, 𝟷𝟶𝟶𝟶); } 𝗪𝗵𝘆 𝘁𝗵𝗶𝘀 𝘄𝗼𝗿𝗸𝘀: • let is block-scoped • Each iteration gets its own binding • Each closure remembers a different i 𝗬𝗼𝘂’𝗹𝗹 𝘀𝗲𝗲 𝘁𝗵𝗶𝘀 𝗽𝗮𝘁𝘁𝗲𝗿𝗻 𝗶𝗻: • Event handlers • Async loops • API callbacks • Timers • React effects If you don’t understand closures, You don’t see the bug — you just debug longer. #JavaScript #JSFundamentals #Closures #FrontendDevelopment #WebDevelopment #BugFixing #ReactJS #LearningInPublic
To view or add a comment, sign in
-
-
Proxy Objects in JavaScript: Intercepting Property Operations One of the more advanced and interesting features introduced in ECMAScript 6 is the Proxy object. This powerful tool allows custom behavior to be defined for fundamental operations on objects. A Proxy is a powerful instrument in JavaScript that opens up new possibilities for development and code enhancement. Creating a proxy object in JavaScript is done using the Proxy constructor. It accepts two arguments: a target object and a handler. The handler is an object whose methods define the proxy's behavior for various operations such as property reading, property writing, and so on. In this example, whenever an attempt is made to set a property value through the proxy, the set trap in the handler is invoked. It logs information about which property was changed and to what value, and then sets that value for the property on the target object. #proxy #interception #js
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
Undefined