Sitemap

JavaScript Variables: Containers of the Code World

4 min readDec 10, 2024

--

Press enter or click to view image in full size
Photo by Raymond Rasmusson on Unsplash

Imagine you’re organizing a treasure hunt. Each clue leads to a hidden container holding a treasure: coins, gems, or even a secret map. These containers, with labels like Clue 1 or Treasure Chest, help you keep track of all your treasures.

Get Justin Thomas’s stories in your inbox

Join Medium for free to get updates from this writer.

In JavaScript, variables are like those labeled containers. They store pieces of information — numbers, text, or even entire treasure maps (objects and arrays). And just like in a treasure hunt, using the right container is key to finding your way!

Declaring Variables: Finding Your Container

In JavaScript, you can declare a variable in three ways:

  • var: The classic container—reliable but with some quirks.
  • let: The modern container—flexible and preferred for most tasks.
  • const: The unchangeable container—perfect for treasures that stay the same.
var classic = "Old but gold";
let modern = "Flexible and dynamic";
const fixed = "Immutable treasure";

The Scope of Variables: Where Are They Hidden?

Each container in your hunt is placed in a specific location. Similarly, variables in JavaScript are either:

  • Global: Found anywhere in the script.
  • Local: Hidden within a block or function.
let globalTreasure = "Accessible anywhere";

function localHunt() {
let localTreasure = "Hidden inside this function";
console.log(localTreasure); // Works here
}
console.log(localTreasure); // Error! Out of scope.

Hoisting: JavaScript’s Magical Sorting Trick

Imagine placing a treasure chest at the end of a room, but when the game begins, it magically appears at the entrance! That’s hoisting. JavaScript moves all variable declarations to the top of their scope.

console.log(hoisted); // Output: undefined
var hoisted = "I'm hoisted!";

With let and const, however, the magic doesn’t work:

console.log(notHoisted); // Error! Cannot access before declaration.
let notHoisted = "I stay put.";

Block Scope: The Treasure Chest’s True Boundaries

With modern containers (let and const), treasures are safely locked within their blocks, unlike the leaky var containers.

{
let blockScoped = "Inside block";
console.log(blockScoped); // Output: Inside block
}
console.log(blockScoped); // Error! Out of scope.

Temporal Dead Zone (TDZ): The “No-Access” Zone

Imagine a treasure chest that appears in the room but cannot be opened until you declare its key. That’s the Temporal Dead Zone (TDZ) in JavaScript!

console.log(temp); // Error! Cannot access before initialization.
let temp = "Treasure unlocked!";

Shadowing: When Treasures Overlap

What if two treasures have the same label? The innermost one takes precedence.

let treasure = "Gold";
function hunt() {
let treasure = "Silver";
console.log(treasure); // Output: Silver
}
hunt();
console.log(treasure); // Output: Gold

Strict Mode: A Rulebook for Treasure Hunters

JavaScript allows accidental global variable creation by default. But strict mode enforces discipline, avoiding common mistakes.

"use strict";
undeclaredVar = "This will throw an error!"; // ReferenceError

Use strict mode to make your hunt error-free!

Dynamic Typing: Flexible Containers

In JavaScript, your treasure chest can hold coins one moment and a map the next. This is because JavaScript is dynamically typed.

let [gold, silver, bronze] = ["Gold Coin", "Silver Coin", "Bronze Coin"];
console.log(gold); // Output: Gold Coin

let { name, value } = { name: "Emerald", value: 100 };
console.log(name); // Output: Emerald

Variable Destructuring: Unpacking Treasures

Imagine opening a chest to find a bundle of treasures. With destructuring, you can unpack these treasures quickly.

let [gold, silver, bronze] = ["Gold Coin", "Silver Coin", "Bronze Coin"];
console.log(gold); // Output: Gold Coin

let { name, value } = { name: "Emerald", value: 100 };
console.log(name); // Output: Emerald

Template Literals: Treasure Maps for Strings

Template literals let you create dynamic strings effortlessly. Think of them as maps with placeholders for variables.

let treasure = "Gold";
let message = `The hidden treasure is: ${treasure}`;
console.log(message); // Output: The hidden treasure is: Gold

Const Objects and Arrays: Immovable, But Flexible

While a const container cannot be reassigned, its contents (like objects and arrays) can still be modified:

const treasureBox = { type: "Gold", amount: 100 };
treasureBox.amount = 200; // Allowed
console.log(treasureBox); // { type: "Gold", amount: 200 }

treasureBox = { type: "Silver" }; // Error! Cannot reassign.

Variables and Memory: Treasure Stored Behind the Scenes

Ever wondered where JavaScript keeps your variables? Primitive values (like strings and numbers) are stored directly in the variable, while objects and arrays are stored as references.

let treasure1 = { type: "Gold" };
let treasure2 = treasure1;

treasure2.type = "Silver";
console.log(treasure1.type); // Output: Silver

Variable Lifespan: When Treasures Appear and Disappear

Variables in JavaScript live in memory until they’re no longer needed.

  • Global variables stay for the lifetime of the script.
  • Local variables disappear once their block or function is done.
function tempStorage() {
let temporaryTreasure = "Here for a moment";
console.log(temporaryTreasure);
}
tempStorage();
console.log(temporaryTreasure); // Error! It’s gone.

Best Practices: Guidelines for Treasure Management

  1. Use const for constants: Prefer const for values you don’t intend to change.
  2. Use let for mutable variables: Choose let for variables whose values will change.
  3. Avoid var: Unless you’re dealing with legacy code, stick to let and const.
  4. Name variables meaningfully: Avoid vague names like x or data. Use descriptive names like userName or totalScore.
  5. Minimize global variables: Too many globals can lead to unintended overlaps, also known as global pollution.

Recap: The Treasure Hunt Simplified

JavaScript variables are the backbone of your programming treasure hunt. From choosing the right container (let, const, or var) to understanding their scope and lifespan, mastering variables is crucial for clean and efficient code. Follow best practices, avoid pitfalls like global pollution, and you’ll be a treasure hunter at the top of your game!

--

--

Justin Thomas
Justin Thomas

I’m Justin, a passionate JavaScript enthusiast and a Frontend Developer from India. I love breaking down complex concepts into simple, relatable stories.