Today I Learned: Iterators & Generators in JavaScript One of the most interesting parts of modern JavaScript is how it handles iteration, and today I finally understood how Iterators and Generators work under the hood! 🧠 1. Iterators An iterator is simply an object that defines how to step through a sequence, one value at a time. It follows the pattern: const iterator = [10, 20, 30][Symbol.iterator](); console.log(iterator.next()); // { value: 10, done: false } console.log(iterator.next()); // { value: 20, done: false } Each call to .next() gives you the next value until done: true. ⚙️ Generators A generator function (defined with function*) automatically creates an iterator for you. function* greet() { yield "Hi"; yield "Hello"; yield "Hey"; } const it = greet(); console.log(it.next().value); // Hi console.log(it.next().value); // Hello What’s cool is that you can pause and resume function execution! 🔥 💡 Key Takeaway: Iterators let you take control of how data is accessed. Generators make it easier to build your own iterators — letting you write asynchronous, lazy, and powerful code structures. Every day, I’m realising how deep JavaScript really is — and how beautiful its design becomes when you understand what’s happening under the hood. #JavaScript #WebDevelopment #LearningInPublic #BackendDevelopment #ES6
Understanding Iterators and Generators in JavaScript
More Relevant Posts
-
💡 Why Almost Everything in JavaScript is an “Object” If you’ve ever heard “everything in JavaScript is an object”, you’re not alone — and you’re almost right. 😄 Here’s the real story 👇 JavaScript is a prototype-based language, where most things — from arrays to functions — are built on top of objects. This makes JavaScript incredibly flexible and dynamic. ✅ Numbers, strings, and booleans Even these primitives temporarily behave like objects when you access methods: "hello".toUpperCase(); // works because JS wraps it in a String object ✅ Functions and Arrays They’re technically objects too — with callable or iterable behavior added on top. That’s why you can do things like: myFunc.customProp = 42; ✅ Everything inherits from Object.prototype It’s the ultimate ancestor — where common methods like toString() and hasOwnProperty() live. 🧠 Key Takeaway JavaScript’s design treats almost everything as an object so it can: Extend behavior dynamically Support inheritance via prototypes Provide consistency across data types But remember: Primitives (null, undefined, number, string, boolean, symbol, bigint) are not true objects — they just act like them when needed. 🚀 TL;DR In JavaScript, objects are the foundation. Almost everything is built on top of them — it’s what gives JS its power, flexibility, and sometimes… confusion. 😅 #JavaScript #WebDevelopment #Frontend #React #Coding #Learning
To view or add a comment, sign in
-
🚀 Decoding the Browser: How JavaScript Truly Executes! Today I explored how JavaScript executes inside the browser, and it was truly fascinating to understand the step-by-step process behind the scenes! 💡 (Check out the JIT compilation flow in the image!) Here’s what I learned 👇 1. The Synchronous Dance (JS Engine & JIT Compilation) Loading Phase: The browser starts by loading the HTML and identifies any <script> tags. Engine Hand-off: Once found, the code is sent to the JavaScript Engine (like Chrome’s V8). The Engine's Core Steps: ✨ Parsing: The engine first reads your code and converts it into an Abstract Syntax Tree (AST) 🎄. This is the structural map of your code. ⚙️ Interpretation: The Interpreter then quickly executes this AST, generating Bytecode. This ensures fast startup. ⚡ Just-In-Time (JIT) Compilation: For frequently executed code, the Optimizing Compiler steps in, transforming the Bytecode into highly efficient Machine Code for maximum performance. 🧩 Execution: The synchronous code runs on the Call Stack, while variables and objects are managed in the Memory Heap. 2. Mastering Asynchronous Operations (Event Loop) For asynchronous operations (set Timeout, fetch, etc.), the Web APIs, Callback Queue, and Event Loop beautifully coordinate to ensure non-blocking execution, keeping your UI responsive. 💬 In essence: HTML Parsing → JS Engine (Parsing + JIT Compilation) → Call Stack + Heap → Web APIs + Callback Queue + Event Loop → Execution Understanding this comprehensive flow is key to writing efficient, optimized, and clean JavaScript code that performs brilliantly. Excited to continue learning and sharing my progress each day under the guidance of Sudheer Velpula Sir. 🙌 #JavaScript #WebDevelopment #Frontend #LearningJourney #Coding #SudheerSir #10000coders
To view or add a comment, sign in
-
-
🚀 Day 30/50 – Function Currying in JavaScript Think of Function Currying like building a relationship. You don’t propose directly 😅 First comes the “Hi Hello 👋” phase → then friendship ☕ → and finally… the proposal ❤️ In JavaScript, instead of passing all arguments at once, Function Currying lets us pass them step by step, each step returning a new function until the final output is achieved. Here’s a simple code analogy from my video: function proposeTo(crush) { return function (timeSpent) { return function (gift) { return `Dear ${crush}, after ${timeSpent} of friendship, you accepted my ${gift}! 🥰`; }; }; } console.log(proposeTo("Sizuka")("3 months")("red rose 🌹")); Each function takes one argument and returns another function — making the code modular, flexible, and easy to reuse. 👉 This is Function Currying — one argument, one step, one perfect result. 🎥 Watch the full short video here: 🔗 https://lnkd.in/g-NkeYBc --- 💡 Takeaway: Function Currying isn’t just a JavaScript trick — it’s a powerful pattern for cleaner, more composable functions that enhance reusability and maintainability in modern frontend code. --- Would love to know: 👉 What’s your favorite JavaScript concept that clicked instantly when you saw it explained simply? #javascript #frontenddevelopment #webdevelopment #coding #programming #softwareengineering #learnjavascript #100daysofjavascript #techsharingan #developers #careergrowth
To view or add a comment, sign in
-
💡 JavaScript Event Loop Explained Visually! Ever wondered why Promise runs before setTimeout() even when the timeout is 0ms? 🤔 Let’s break it down step-by-step 👇 1️⃣ console.log('Start!') → Runs immediately. 2️⃣ setTimeout(...) → Sent to the Web API, then moves to the Macrotask Queue. 3️⃣ Promise.resolve(...) → Sent to the Microtask Queue. 4️⃣ console.log('End!') → Runs next. 5️⃣ Event loop checks → Executes Microtasks first (Promise!). 6️⃣ Then Macrotasks (Timeout!). ✅ Final Output: Start! End! Promise! Timeout! Even though JavaScript is single-threaded, it feels asynchronous thanks to the Event Loop, Microtasks, and Macrotasks working together in perfect sync. By understanding this flow, you can write more efficient and predictable asynchronous code a must for every modern JavaScript developer. ⚡ 🚀 Key takeaway: The Event Loop is the heart of JavaScript’s async behavior once you master it, async code starts making complete sense. 💬 What was your first “Aha!” moment when learning about the Event Loop? Let’s discuss below 👇 #JavaScript #WebDevelopment #EventLoop #AsyncProgramming #CodingTips #Frontend #NodeJS #ProgrammingConcepts #TechEducation #Developers #JSFacts #CodeLearning
To view or add a comment, sign in
-
-
🚀 Understanding the JavaScript Event Loop Have you ever wondered how JavaScript — a single-threaded language — handles async tasks like setTimeout(), fetch(), or Promises without freezing the browser? 🤔 That’s where the Event Loop comes in! 🌀 ⚙️ How it works 1️⃣ Call Stack → Executes synchronous code (like console.log()). 2️⃣ Web APIs → Handle async tasks (like timers or network requests). 3️⃣ Callback Queues Microtask Queue → Handles Promises and async/await. Macrotask Queue → Handles setTimeout, setInterval, etc. 4️⃣ Event Loop → Continuously checks: > “Is the call stack empty?” If yes → It pushes queued callbacks back to the stack for execution. 🧠 Example: console.log("A"); setTimeout(() => console.log("B"), 0); Promise.resolve().then(() => console.log("C")); console.log("D"); Output: A D C B Because ➡️ A & D → run first (synchronous). C → from Promise (microtask). B → from setTimeout (macrotask). 💡 Takeaway > Event Loop makes JavaScript feel asynchronous — even though it runs on a single thread! ⚡ 🔖 #JavaScript #EventLoop #WebDevelopment #AsyncJS #Frontend #Angular #React #CodingTips
To view or add a comment, sign in
-
💡 Deep Dive into JS Concepts: How JavaScript Code Executes ⚙️ Ever wondered what really happens when you hit “Run” in JavaScript? 🤔 Let’s take a simple, visual deep dive into one of the most powerful JS concepts — ✨ The Execution Context & Call Stack! 🧠 Step 1: The Global Execution Context (GEC) When your JS file starts, the engine (like Chrome’s V8) creates a Global Execution Context — the environment where everything begins 🌍 It has two phases: 🧩 Creation Phase Memory allocated for variables & functions Variables set to undefined (Hoisting!) Functions fully stored in memory ⚡ Execution Phase Code runs line by line Variables get actual values Functions are executed 🚀 🔁 Step 2: Function Execution Context (FEC) Every time a function is called, a brand-new Execution Context is created 🧩 It also runs through creation + execution phases. When the function finishes — it’s removed from memory 🧺 🧱 Step 3: The Call Stack Think of the Call Stack like a stack of plates 🍽️ Each function call adds (pushes) a new plate When done, it’s removed (popped) JS always executes the topmost plate first Example 👇 function greet() { console.log("Hello"); } function start() { greet(); console.log("Welcome"); } start(); 🪜 Execution Order: 1️⃣ GEC created 2️⃣ start() pushed 3️⃣ greet() pushed 4️⃣ greet() popped 5️⃣ start() popped 6️⃣ GEC popped ✅ ⚙️ Step 4: Quick Recap 🔹 JS runs inside Execution Contexts 🔹 Each function = its own mini world 🔹 Contexts live inside the Call Stack 🔹 Each runs through Creation → Execution “JavaScript doesn’t just run line-by-line — it builds a whole world (context) for your code to live and execute inside.” 🌐 #javascript #webdevelopment #frontend #developers #learnjavascript #executionscontext #callstack #jsengine #programming #deeplearning
To view or add a comment, sign in
-
-
💡 Day 8/50 – Mastering JavaScript’s Subtle Behaviors 🚀 In JavaScript, sometimes the hardest bugs aren’t syntax errors — they’re “Wait… why did that happen?” moments 😅 Today’s Day 8 questions were built around 3 such moments that every developer faces: --- 🧬 1️⃣ Prototype Inheritance — The Hidden Chain When you create an object using Object.create(), it doesn’t copy properties from the parent… it links to it. That means if a property isn’t found in the child, JavaScript looks up the prototype chain to find it. 👉 This “lookup behavior” often confuses devs who expect a fresh, independent copy. So the next time you’re debugging unexpected data access, remember — It might not be your object, it might be its prototype! --- 🧠 2️⃣ The Mystery of Double .bind() You might think rebinding a function twice changes its context again. But nope! Once you bind a function in JavaScript, it’s permanently bound. Calling .bind() again has no effect — the context (the value of this) stays fixed to the first bind. 💡 Why? Because bind() returns a new function with the this value locked in forever. --- 🧩 3️⃣ Type Coercion + Function Conversion Ever tried adding a function to a string like add + "text"? JavaScript doesn’t crash — it converts your function to a string using its internal toString() method! The result isn’t math; it’s a combination of type coercion and string representation. This is one of those delightful quirks that makes JS both fun and… slightly unhinged 😄 --- 📽️ Watch Day 8 Reel: https://lnkd.in/gBHYWgyi Because once you understand the why, no interviewer can trick you again 😉 #JavaScript #FrontendDevelopment #WebDevelopment #JSInterviewQuestions #CodingChallenge #TechLearning #SoftwareEngineering #Techsharingan #Developers
To view or add a comment, sign in
-
🚀 My “Aha!” JavaScript Moment: Why does var print 3 three times? A few days ago, I was revisiting some JavaScript fundamentals… and I came across this classic piece of code 👇 for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1000); } I expected: 0 1 2 But guess what I got? 3 3 3 😅 I paused for a second and thought — “Wait… what just happened?” 🧠 The Moment of Clarity Here’s what’s really going on: var in JavaScript is function-scoped, not block-scoped. So inside that for loop, all iterations share one single i variable. By the time the setTimeout callbacks actually run (after 1 second), the loop has already finished — and i has become 3. So all three callbacks look at the same i, and print 3. Boom 💥 — mystery solved. ✅ The Fix? Use let When we switch to let, something magical happens: for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1000); } Now, let is block-scoped, meaning each iteration gets its own copy of i. Each callback “remembers” the value from that iteration. Result: 0 1 2 💡 My Mental Model I now think of it like this: Using var: one whiteboard where you keep erasing and writing new numbers. Everyone who looks later sees the same final number. Using let: each student gets their own notepad — they all remember their own number. 🧩 Key Takeaway Keyword Scope Loop Behavior Output var Function-scoped Shared variable 3, 3, 3 let Block-scoped New variable each iteration 0, 1, 2 We often jump into frameworks, async/await, and APIs… but sometimes it’s these small, fundamental details that sharpen our understanding the most. 🔍 Have you ever had an “aha!” moment like this in JavaScript (or another language)? Share it below — I’d love to hear your story 👇 #JavaScript #WebDevelopment #AsyncJS #Frontend #FullStackDeveloper #LearningToCode #CodingJourney #Developers #CareerGrowth
To view or add a comment, sign in
-
Event Loop in JavaScript — How JS Executes Code Step by Step Here’s your LinkedIn-style post 👇 🧠 JavaScript Event Loop — The Brain Behind Asynchronous Magic 🌀 Ever wondered how JavaScript handles multiple tasks at once even though it’s single-threaded? 🤔 The answer lies in the Event Loop, one of the most powerful concepts in JS. 💡 Definition: The Event Loop is the mechanism that allows JavaScript to perform non-blocking, asynchronous operations — by coordinating between the Call Stack, Web APIs, and Task Queues. ⚙️ How It Works: 1️⃣ Call Stack: Where JS executes your code line by line. If a function calls another, it gets stacked on top. 2️⃣ Web APIs: Handles async operations like setTimeout(), fetch(), or event listeners. 3️⃣ Task Queues (Micro & Macro): Stores completed async tasks waiting to be executed. 4️⃣ Event Loop: Continuously checks if the Call Stack is empty. If empty, it moves the next task from the queue into the stack. 🧩 Example: console.log("1️⃣ Start"); setTimeout(() => console.log("3️⃣ Timeout callback"), 0); Promise.resolve().then(() => console.log("2️⃣ Promise resolved")); console.log("4️⃣ End"); ✅ Output: 1️⃣ Start 4️⃣ End 2️⃣ Promise resolved 3️⃣ Timeout callback 👉 Promises (microtasks) run before timeouts (macrotasks) — thanks to the Event Loop’s priority order. ⚙️ Why It’s Important: ✅ Helps debug async behavior ✅ Avoids race conditions ✅ Essential for understanding Promises & Async/Await 🔖 #JavaScript #EventLoop #AsyncProgramming #WebDevelopment #Frontend #JSConcepts #CodingTips #100DaysOfCode #KishoreLearnsJS #WebDevCommunity #DeveloperJourney
To view or add a comment, sign in
-
🍏 JS Daily Bite #10 — JavaScript Prototype Chains: A Full Comparison Master JavaScript's prototype-based inheritance system by exploring ways to create and manipulate prototype chains, their trade-offs, and best practices. 🏗️ Methods for Creating Prototype Chains: 1️⃣ Object Literal Syntax with __proto__ ✅ Standardized, optimized, more performant than Object.create() ✅ Ergonomic for declaring properties at creation ⚠️ Fails silently when pointing to non-objects 2️⃣ Constructor Functions ✅ Fast, standard, JIT-optimizable ⚠️ Methods are enumerable by default, inconsistent with class syntax ⚠️ Error-prone for longer inheritance chains 3️⃣ Object.create() ✅ Direct prototype setting at creation ✅ Can create objects with null prototype ⚠️ Verbose, error-prone, potentially slower than literals 4️⃣ Classes (ES6+) ✅ Ideal for complex inheritance with readability and maintainability ✅ Supports private elements ⚠️ Less optimized than traditional constructors 🔧 Mutating Existing Prototype Chains: 1️⃣ Object.setPrototypeOf() ✅ Modify the prototype of existing objects ⚠️ Can disrupt engine optimizations 💡 Best practice: set prototype during object creation 2️⃣ The __proto__ Accessor ⚠️ Fails silently with non-objects ⚠️ Non-standard and deprecated 💡 Recommendation: use Object.setPrototypeOf() instead ⚡ Performance Considerations: 1️⃣ Prototype Chain Lookup Costs Deep chains slow property access Non-existent properties traverse the entire chain All enumerable properties in the chain are iterated 2️⃣ Checking Own Properties Use hasOwnProperty() or Object.hasOwn() Don’t rely solely on undefined checks 🔜 Next in the Series: Enumerability and ownership of properties #JavaScript #JSDailyBite #WebDevelopment #Programming #LearnToCode #Prototypes #Inheritance #SoftwareEngineering #FrontendDevelopment #JSFundamentals #TechEducation
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