🤔 𝗕𝗲𝗳𝗼𝗿𝗲 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝘀𝘁𝗮𝗿𝘁𝘀 𝗲𝘅𝗲𝗰𝘂𝘁𝗶𝗻𝗴... 𝘄𝗵𝗮𝘁 𝗮𝗰𝘁𝘂𝗮𝗹𝗹𝘆 𝗵𝗮𝗽𝗽𝗲𝗻𝘀 𝗶𝗻𝘀𝗶𝗱𝗲 𝘁𝗵𝗲 𝗲𝗻𝗴𝗶𝗻𝗲? I was revisiting some JS fundamentals and came across something interesting — Before 𝗘𝘅𝗲𝗰𝘂𝘁𝗶𝗼𝗻 𝗖𝗼𝗻𝘁𝗲𝘅𝘁, 𝗖𝗮𝗹𝗹 𝗦𝘁𝗮𝗰𝗸, or 𝗦𝗰𝗼𝗽𝗲 𝗖𝗵𝗮𝗶𝗻 even exist… the JS engine has already done a lot of work. ⚙️ 𝗦𝗼 𝘄𝗵𝗮𝘁 𝗱𝗼𝗲𝘀 𝗮 𝗝𝗦 𝗲𝗻𝗴𝗶𝗻𝗲 𝗱𝗼 𝗯𝗲𝗳𝗼𝗿𝗲 𝗲𝘅𝗲𝗰𝘂𝘁𝗶𝗼𝗻? Let’s take Google Chrome’s V8 Engine (also used in Node.js) as an example: 1️⃣ Reads your code as plain text 2️⃣ Breaks it into small tokens (let, {}, function, etc.) 3️⃣ Builds a structured tree called 𝗔𝗦𝗧 (𝗔𝗯𝘀𝘁𝗿𝗮𝗰𝘁 𝗦𝘆𝗻𝘁𝗮𝘅 𝗧𝗿𝗲𝗲) 4️⃣ Checks for syntax errors here (before running anything) 5️⃣ Converts AST → 𝗕𝘆𝘁𝗲𝗰𝗼𝗱𝗲, ready for execution Only 𝗮𝗳𝘁𝗲𝗿 𝗮𝗹𝗹 𝘁𝗵𝗶𝘀 — the 𝗘𝘅𝗲𝗰𝘂𝘁𝗶𝗼𝗻 𝗖𝗼𝗻𝘁𝗲𝘅𝘁 is created, hoisting happens, and your code finally starts running. And yes, this process isn’t just for 𝗩𝟴 (𝗖𝗵𝗿𝗼𝗺𝗲 / 𝗡𝗼𝗱𝗲.𝗷𝘀) — 𝗦𝗽𝗶𝗱𝗲𝗿𝗠𝗼𝗻𝗸𝗲𝘆 (Firefox), 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁𝗖𝗼𝗿𝗲 (Safari), and even 𝗖𝗵𝗮𝗸𝗿𝗮 (old Edge) do something similar. Different engines, same concept: 𝗣𝗮𝗿𝘀𝗲 → 𝗔𝗦𝗧 → 𝗕𝘆𝘁𝗲𝗰𝗼𝗱𝗲 → 𝗘𝘅𝗲𝗰𝘂𝘁𝗲 → 𝗢𝗽𝘁𝗶𝗺𝗶𝘇𝗲 It’s wild how much JavaScript does before we even hit that first 𝘤𝘰𝘯𝘴𝘰𝘭𝘦.𝘭𝘰𝘨() 😅 #javascript #v8engine #javascriptcore #nodejs #executioncontext #namastejavascript #programming #learninpublic #frontend #backend #techcommunity
How JavaScript engine works before execution
More Relevant Posts
-
💡 Today I learned how libuv works behind the scenes in Node.js When we talk about Node.js, it mainly has two core parts: 1. ⚙️ V8 Engine – Executes JavaScript code. 2. ⚡ libuv – Handles all the asynchronous, non-blocking I/O operations. Whenever we write JavaScript code in Node.js, the V8 engine runs the synchronous parts line by line. But when Node encounters an async task like: fs.readFile() setTimeout() https.get() …it offloads them to libuv so the main thread doesn’t get blocked. 🔍 What libuv Does? libuv is the superhero that makes Node.js non-blocking. It manages: - A Thread Pool (for file system & network tasks) - Multiple Callback Queues (for timers, I/O, immediates, etc.) - The Event Loop (that decides when each callback should run) 🌀 How the Event Loop Works The event loop in libuv runs continuously in cycles and has four main phases: 1.⏱️ Timer Phase – Executes callbacks from setTimeout() & setInterval(). 2.⚙️ Poll Phase – Executes most I/O callbacks like fs.readFile() or https.get(). 3.🚀 Check Phase – Executes callbacks from setImmediate(). 4.🧹 Close Phase – Handles cleanup tasks like closing sockets. Between every phase, Node checks for microtasks like process.nextTick() and Promise callbacks, which have higher priority and run before moving to the next phase. ⚡ In Short: 1. V8 runs your code synchronously. 2. Async tasks go to libuv. 3. libuv manages them in background threads. 4. The event loop schedules their callbacks efficiently. That’s how Node.js achieves asynchronous, non-blocking I/O even though JavaScript is single-threaded! 🧠✨ #NodeJS #JavaScript #WebDevelopment #Backend #LearningInPublic #libuv #EventLoop #AsyncProgramming
To view or add a comment, sign in
-
Today I explored how JavaScript executes inside the browser, and it was truly fascinating to understand the step-by-step process behind the scenes! 💡 Here’s what I learned 👇 🔹 The browser starts by loading the HTML and identifying any <script> tags. 🔹 Once found, the code is sent to the JavaScript Engine (like Chrome’s V8). 🔹 The engine performs three key steps — ✨ Parsing: Reads and converts code into an Abstract Syntax Tree (AST). ⚙️ Compilation (JIT): Translates JS into optimized machine code for faster execution. 🧩 Execution: Runs the code in the Call Stack, while variables and objects are managed in the Memory Heap. 🔹 For asynchronous operations (set Timeout, fetch, etc.), the Web APIs, Callback Queue, and Event Loop coordinate to ensure non-blocking execution. 💬 In short: HTML Parsing → JS Engine → Call Stack → Web APIs → Callback Queue → Event Loop → Execution Understanding this flow helps in writing efficient, optimized, and clean JavaScript code. Excited to continue learning and sharing my progress each day under the guidance of Sudheer Velpula Sir. 🙌 #JavaScript #WebDevelopment #Frontend #LearningJourney #Coding #SudheerSir
To view or add a comment, sign in
-
-
Async/Await — cleaner code, same engine. Let’s decode the magic behind it ⚙️👇 Ever heard the phrase — “JavaScript is asynchronous, but still runs in a single thread”? That’s where Promises and Async/Await come into play. They don’t make JavaScript multi-threaded — they just make async code smarter and cleaner 💡 Here’s a quick look 👇 // Using Promise fetchData() .then(res => process(res)) .then(final => console.log(final)) .catch(err => console.error(err)); // Using Async/Await async function loadData() { try { const res = await fetchData(); const final = await process(res); console.log(final); } catch (err) { console.error(err); } } Both do the same job — ✅ Promise handles async tasks with .then() chains ✅ Async/Await makes that flow look synchronous But what’s happening behind the scenes? 🤔 The V8 engine runs your JS code on a single main thread. When async functions like fetch() or setTimeout() are called, they’re handled by browser APIs (or libuv in Node.js). Once those tasks complete, their callbacks are queued. Then the Event Loop picks them up when the main thread is free and executes them back in the call stack. In simple words — > Async/Await doesn’t change how JavaScript works. It just gives async code a clean, readable face 🚀 That’s the power of modern JavaScript — fast, efficient, and elegant ✨ #JavaScript #AsyncProgramming #WebDevelopment #Frontend #FullStack #NodeJS #ReactJS #MERNStack #Coding #SoftwareEngineering #DeveloperLife
To view or add a comment, sign in
-
🚀 Ever wondered how JavaScript handles thousands of async tasks without breaking a sweat? Here’s the secret — it’s all about the Event Loop 🌀 While JavaScript runs on a single thread, it multitasks like a pro thanks to: ⚙️ Web APIs → handle async operations (like setTimeout, fetch) 🧩 Microtask Queue → high-priority tasks (like Promises) 🕓 Macrotask Queue → low-priority tasks (like timers, I/O) 🔁 Event Loop → keeps everything in sync, executing tasks in the right order Think of it like a comedy show — 🎤 The Call Stack performs the main act. ☕ The Microtask Queue (promises) impatiently waits backstage. 😴 The Macrotask Queue (timeouts) waits for its turn... maybe after a coffee break. So the magic order goes like this: 👉 synchronous → microtasks → macrotasks. That’s how JavaScript keeps running smoothly, even when your code looks chaotic! 💡 Fun fact: this entire process is powered by libuv (in Node.js), the hidden engine managing these background threads. 📘 Curious how Node.js handles I/O with threads and CPU cores? Stay tuned — I’m breaking that down next! 👇 #JavaScript #WebDevelopment #MERN #NodeJS #EventLoop #AsyncProgramming #FullStackDeveloper #Coding #Developers
To view or add a comment, sign in
-
-
Let’s talk about a subtle but powerful gem in JavaScript you might be overlooking: The Nullish Coalescing Operator (??). In 2024, with codebases growing more complex, handling “empty” or “absent” values cleanly is more important than ever. And that’s where this operator shines. You’re probably familiar with the OR operator (||) for providing default values. It’s nice, but has a gotcha — it treats falsy values like 0, '', or false as “absent,” which can break your logic unexpectedly: ```javascript const count = 0; const defaultCount = count || 10; console.log(defaultCount); // prints 10, but you might expect 0 here! ``` Oops! Here, 0 is a legitimate value, but || doesn’t see it that way. Enter the nullish coalescing operator ?? — it only catches null or undefined, not other falsy values: ```javascript const count = 0; const defaultCount = count ?? 10; console.log(defaultCount); // prints 0, which is correct ``` Simple but game-changing! Why should you care? - It helps you write safer defaults without accidentally overriding valid falsy values. - It improves code readability by making intent crystal clear. - It pairs beautifully with optional chaining (?.), another modern JS feature, to safely access deeply nested properties: ```javascript const user = { settings: { theme: null } }; const theme = user.settings?.theme ?? 'light'; console.log(theme); // "light" instead of null or error ``` This combo is essential for handling real-world data where some properties might be missing or intentionally null. My takeaway: When you need fallback values, prefer `??` over `||` if you want to preserve meaningful falsy values like 0, false, or ''. Give it a try next time you find yourself writing default values. Small changes like this make your code cleaner, fewer bugs sneak in, and your future self thanks you. Happy coding! #JavaScript #FrontendDev #CodeQuality #WebDevelopment #ProgrammingTips #TechTrends #CleanCode
To view or add a comment, sign in
-
🚀 𝗗𝗲𝗲𝗽 𝗖𝗹𝗼𝗻𝗲 𝗢𝗯𝗷𝗲𝗰𝘁𝘀 𝗶𝗻 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 (𝘁𝗵𝗲 𝗥𝗜𝗚𝗛𝗧 𝘄𝗮𝘆) Most of us have cloned objects at some point using: const clone = JSON.parse(JSON.stringify(obj)); But… this method silently breaks things 😬 It: ❌ Removes functions ❌ Converts Date objects into strings ❌ Loses undefined, NaN, and Infinity ❌ Completely fails with Map, Set, or circular references So what’s the better approach? ✅ Option 1: Use structuredClone() Modern, fast, and now available in most browsers + Node.js (v17+). It correctly handles: • Dates • Maps • Sets • Circular references No fuss. No polyfills. Just works. ✅ Option 2: Write your own deep clone (for learning) A recursive deep clone function helps understand how object copying really works. (Sharing my implementation in the code snippet images above 👆) ⚡ Pro Tip: If you're dealing with complex nested objects, just use structuredClone(). It’s native, efficient, and avoids hours of debugging later. 🔥 If you found this helpful, 👉 Follow me for more bite-sized JavaScript insights. Let’s learn smart, not hard 🚀 #JavaScript #WebDevelopment #Frontend #NodeJS #CodeTips
To view or add a comment, sign in
-
-
🚨 Understanding JavaScript Errors — A Developer’s Everyday Companion As JavaScript developers, we’ve all seen that scary red text in the console 😅 However, understanding why an error occurs is the key to writing cleaner, more predictable code. Here are the main types of JavaScript errors every developer should know 👇 🧩 1️⃣ Syntax Error Occurs when the code violates JavaScript syntax rules. Example: console.log("Hello World" (Missing closing parenthesis) 🔍 2️⃣ Reference Error Happens when trying to use a variable that doesn’t exist. Example: console.log(userName); // userName is not defined ⚙️ 3️⃣ Type Error Thrown when a value is of the wrong type. Example: let num = 5; num.toUpperCase(); // ❌ num is not a string 🚫 4️⃣ Range Error Occurs when a number or value is outside its allowed range. Example: let arr = new Array(-5); // ❌ invalid array length ⚡ 5️⃣ Eval Error Related to the eval() function (rarely used today — and not recommended). 💡 Pro Tip: Always handle errors gracefully using try...catch blocks, and make logging your best friend during debugging. Errors are not enemies — they’re feedback from the JavaScript engine helping us write better code. 💪 #JavaScript #WebDevelopment #Frontend #Programming #ErrorHandling #Debugging #DeveloperCommunity
To view or add a comment, sign in
-
The Event Loop in Node.js — The Engine Behind the Magic We all know JavaScript is single-threaded… But have you ever wondered — 👉 How Node.js handles thousands of requests without blocking? 👉 How async code actually runs in parallel with I/O tasks? That’s the Event Loop, powered by libuv — the real hero behind Node’s speed. 💥 Here’s how it works 👇 When you run Node.js, it creates one main thread for JS execution. But the heavy stuff — like file reads, database queries, network calls, timers — is sent to libuv’s thread pool or system kernel. Meanwhile, the Event Loop keeps spinning through these phases: 1️⃣ Timers Phase → Executes callbacks from setTimeout() / setInterval() 2️⃣ Pending Callbacks Phase → Handles system-level callbacks 3️⃣ Idle / Prepare Phase → Internal use 4️⃣ Poll Phase → Waits for new I/O events, executes callbacks 5️⃣ Check Phase → Executes setImmediate() 6️⃣ Close Callbacks Phase → Executes cleanup code While it spins, the microtask queue (Promises, async/await) runs between phases — giving Node its ultra-responsive behavior ⚡ That’s why Node.js can handle massive concurrency on a single thread — because the Event Loop never sleeps. 🌀 Once you understand this, debugging async issues, optimizing performance, and handling APIs in Node becomes way easier! #NodeJS #JavaScript #EventLoop #AsyncProgramming #BackendDevelopment #WebDevelopment #MERNStack #ExpressJS #JS #Promises #AsyncAwait #TechCommunity #CleanCode #SoftwareEngineering #DeveloperJourney #100DaysOfCode #CodeNewbie #Programming #Performance #TrendingNow
To view or add a comment, sign in
-
-
🚀 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁’𝘀 𝗠𝗼𝘀𝘁 𝗠𝗶𝘀𝘂𝗻𝗱𝗲𝗿𝘀𝘁𝗼𝗼𝗱 𝗞𝗲𝘆𝘄𝗼𝗿𝗱: this If you’ve ever scratched your head wondering why this doesn’t point where you expect — you’re not alone 😅 Let’s break it down 👇 What is this? • In JavaScript, this refers to 𝘁𝗵𝗲 𝗼𝗯𝗷𝗲𝗰𝘁 𝘁𝗵𝗮𝘁’𝘀 𝗲𝘅𝗲𝗰𝘂𝘁𝗶𝗻𝗴 𝘁𝗵𝗲 𝗰𝘂𝗿𝗿𝗲𝗻𝘁 𝗳𝘂𝗻𝗰𝘁𝗶𝗼𝗻 — but its value 𝗱𝗲𝗽𝗲𝗻𝗱𝘀 𝗼𝗻 𝗵𝗼𝘄 the function is called (not where it’s written). • In Regular Function Declarations / Expressions function showThis() { console.log(this); } showThis(); // In strict mode → undefined | Non-strict → window (in browser) Here, this is determined by the 𝗰𝗮𝗹𝗹𝗲𝗿. When called directly, it defaults to the global object (window), or undefined in strict mode. • In Object Methods const user = { name: "Alice", greet() { console.log(this.name); } }; user.greet(); // "Alice" ✅ this points to the object 𝗯𝗲𝗳𝗼𝗿𝗲 𝘁𝗵𝗲 𝗱𝗼𝘁 (user in this case). In Arrow Functions const user = { name: "Alice", greet: () => console.log(this.name) }; user.greet(); // ❌ undefined Arrow functions 𝗱𝗼𝗻’𝘁 𝗵𝗮𝘃𝗲 𝘁𝗵𝗲𝗶𝗿 𝗼𝘄𝗻 this — they 𝗶𝗻𝗵𝗲𝗿𝗶𝘁 it from the surrounding (lexical) scope. So here, this refers to the global object, not user. 💡 𝗤𝘂𝗶𝗰𝗸 𝗧𝗶𝗽: Use regular functions for object methods if you need access to the object’s properties. Use arrow functions when you want to preserve the parent scope’s this (like inside a class or callback). 👉 Mastering this is one of the biggest “Aha!” moments in JavaScript. What’s your favorite trick or gotcha with this? #JavaScript #WebDevelopment #Frontend #Coding #LearnToCode #JS #this #software
To view or add a comment, sign in
-
🔁 The Secret Behind JavaScript’s Asynchronous Magic — The Event Loop ⚙️ JavaScript is single-threaded, yet it handles asynchronous tasks like API calls, timers, and promises smoothly. How? 🤔 👉 The answer: The Event Loop Here’s how it works 👇 1️⃣ Call Stack → Executes synchronous code 2️⃣ Web APIs → Handles async tasks like fetch, setTimeout 3️⃣ Callback Queue (Macrotasks) → Stores completed async callbacks 4️⃣ Microtask Queue → Stores promises & runs before macrotasks 🧩 Example: console.log("Start"); setTimeout(() => console.log("Timeout"), 0); Promise.resolve().then(() => console.log("Promise")); console.log("End"); Output: Start → End → Promise → Timeout ✅ 👉 Promises (microtasks) run before timeouts (macrotasks) 💡 In short: The Event Loop is JavaScript’s traffic controller — managing async code so your app stays smooth and responsive. 🚀 #JavaScript #WebDevelopment #Frontend #AsyncProgramming #ReactJS #NodeJS #Coding
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
There's a great course by Will Sentance, Javascript the hard parts v2 on frontendmasters