The Difference Between let and var in JavaScript
In JavaScript, you can use let or var to declare mutable variables.
A variable with the let keyword will only be used within the
block it is declared and not affect variables
used in nested blocks, like if statements
and for loops, or outside the block. Below is an example:
let x = 1;
if (x === 1) {
let x = 2;
if (x === 2) {
let x = 3;
x; // 3
}
x; // 2
}
x; // 1
The other option is var. The var keyword's reach can be function-scoped or
globally-scoped. var variables declared in
functions will not bleed into other functions, but will into nested
blocks, like if statements and for loops.
var x = 1;
if (x === 1) {
var x = 2;
if (x === 2) {
var x = 3;
x; // 3
}
x; // 3
}
x; // 3
Hoisting
Another difference between let and var is you can use a variable declared with var before the actual var
statement. This is because JavaScript "hoists" all var declaration to the start of the function call.
This is a common source of confusion, which is one of the reasons why we recommend using let instead of var.
function test() {
console.log(x); // undefined
console.log(y); // "ReferenceError: Cannot access 'y' before initialization"
var x = 3;
let y = 3;
}
test();
let declarations are hoisted too, but you get a ReferenceError if you try to access a variable declared with let before the actual declaration statement runs. That is why the error message is "Cannot access 'y' before initialization", as opposed to "y is not defined", which is what JavaScript would throw if you didn't declare y at all.