Variables
let, const, var
What are Variables?
Variables are containers that store values. In JavaScript, you declare a variable using a keyword (var, let, or const), give it a name, and optionally assign an initial value.
Three Declaration Keywords
const (Constant)
Use const by default. It creates a block-scoped variable that cannot be reassigned. This is your first choice for almost all variables.
const name = "Alice";
const age = 25;
const isStudent = true;
// name = "Bob"; // Error: Assignment to constant variable
π‘ Important:
const prevents reassignment, not mutation. Objects and arrays can still have their contents modified:
const user = { name: "Alice" };
user.name = "Bob"; // Allowed β modifying the object
// user = {}; // Error β cannot reassign
const numbers = [1, 2, 3];
numbers.push(4); // Allowed β modifying the array
// numbers = []; // Error β cannot reassign
let (Local Variable)
Use let when you need to reassign a value. It is block-scoped, meaning it only exists within the nearest enclosing block (function, loop, if statement).
let count = 0;
count = 1; // Allowed β reassignment is fine
count = 2;
if (true) {
let localVar = "inside";
// localVar is only accessible here
}
// console.log(localVar); // Error: localVar is not defined
var (Avoid)
var is the old way to declare variables. It is function-scoped (not block-scoped) and can lead to confusing bugs. Avoid var in modern code.
function example() {
if (true) {
var oldWay = "visible outside block";
}
console.log(oldWay); // "visible outside block" β leaked outside the block!
}
Scope
Scope determines where a variable is accessible. JavaScript has three types of scope:
π Global Scope
Variables declared outside any function are global (avoid polluting it).
π¦ Function Scope
Variables declared inside a function are only accessible within that function.
βοΈ Block Scope
Variables declared with let and const are only accessible within their block (e.g., inside an if, for, or function).
const global = "I'm everywhere";
function example() {
const functionScoped = "Only here";
for (let i = 0; i < 3; i++) {
const blockScoped = "Only in the loop";
}
// console.log(blockScoped); // Error: not defined
}
Best Practices
-
β
Use const by default
It's clear, safe, and prevents accidental reassignment.
-
β
Use let when you need reassignment
Be explicit about mutability.
-
β
Never use var
It's outdated and confusing.
-
β
Choose descriptive names
userName is better than un or x.
-
β
Declare variables close to use
Don't declare everything at the top of a function.
Summary Table
| Keyword | Scope | Reassignable | Recommended |
|---|---|---|---|
| const | Block | No | Default choice |
| let | Block | Yes | When needed |
| var | Function | Yes | Avoid |