Skip to main content

Command Palette

Search for a command to run...

var, let, and const in Action!

Updated
4 min read

Ever get confused by var, let, and const in JavaScript? 🤔 You're not alone! These are used to store information, but they behave differently.

Think of a variable as a labeled box where you keep data. How you label that box matters. Let's break it down simply.


1️⃣ var – 🕰️ The Old Way

🔸 Scope: Function-scoped
🔸 Hoisted: Yes (initialized with undefined)
🔸 Redeclarable: ✅ Yes
🔸 Reassignable: ✅ Yes

🧩 Fun Fact:
var was the only way to declare variables before ES6. But it comes with quirks — like being accessible before it's defined (due to hoisting)!


2️⃣ let – 🧱 The Modern Builder

🔸 Scope: Block-scoped (if/else, loops, etc.)
🔸 Hoisted: Yes (but in Temporal Dead Zone)
🔸 Redeclarable: ❌ No
🔸 Reassignable: ✅ Yes

🧠 Use it when:
You need to reassign a variable within a controlled block like loops or conditionals.

🧱 let is the modern replacement for var.

👉 You can reassign values with let.

Unlike const, let allows updates — perfect for values that change over time.


3️⃣ const – 🔐 The Unchangeable Guard

🔸 Scope: Block-scoped
🔸 Hoisted: Yes (but also in TDZ)
🔸 Redeclarable: ❌ No
🔸 Reassignable: ❌ No

⚠️ Gotcha:
You can still mutate objects and arrays declared with const — it’s just the reference that can’t change.

It enhances code clarity and safety
Using const signals to others (and your future self) that the value shouldn't change, making your code more readable and less error-prone.


🐛 Why var Can Introduce Sneaky Bugs in Your JavaScript Code

Have you ever used a variable before declaring it in JavaScript — and nothing broke?
That’s the magic (and danger) of var.

For years, var was the only way to declare variables. But modern JavaScript introduced let and const — for good reason.

Let’s explore two tricky behaviors of var that every developer should understand to write safer, more predictable code.


👻 1. The “Ghost” Variable — Hoisting

In JavaScript, var declarations are hoisted — meaning they're silently moved to the top of their scope before your code runs.

So the variable technically “exists” before you declare it… but it’s undefined until you assign a value.

🧠 This can lead to confusing bugs if you're not careful.

Example in action:

What JavaScript sees:

⚠️ The Problem: Silent Failures Instead of Clear Errors

With var, you don’t get a helpful ReferenceError when using a variable too early.
Instead, JavaScript quietly gives you undefined.

🕵️‍♂️ This can hide logical bugs and make debugging much harder — especially in large codebases.


🚰 2. The “Leaky” Scope

Unlike let and const, variables declared with var are function-scoped, not block-scoped.

This means they can leak out of blocks like if, for, or while, leading to unexpected behavior.

💥 Classic example? A for loop where the loop counter ends up accessible outside the loop!

⚠️ The Problem: Unintended Access & Overwrites

The loop counter i declared with var is still accessible outside the loop.
If you reuse i later in the same function, you might accidentally overwrite its value, leading to unpredictable bugs.


✅ The Solution: let and const to the Rescue

Modern JavaScript (ES6+) gives us let and const to fix var’s quirks:

  • 🧱 Block-scoped: Confined to the {} they’re declared in — no more variable leaks.

  • 🚫 No sneaky hoisting: Accessing them before declaration throws a clear ReferenceError, making bugs easier to catch.


💡 My Rule of Thumb for Declaring Variables in JavaScript:

  • Use const by default — it's safer and shows intent.

  • 🔄 Use let only when you know the value will change.

  • 🚫 Avoid var — it's outdated and often leads to bugs.

Mastering this simple habit leads to cleaner, more predictable code.

What about you — are you team let or team const? Let’s hear your take in the comments! 👇

#JavaScript #CleanCode #WebDevelopment #DevTips #Frontend #CodingBestPractices #SoftwareEngineering #ProgrammingTips