Variable Declarations - Let and Const - ES6
Previously variables were declared using the var
shorthand.
var
declares a varaible statement and is declared before JS code is executed. The scope of a variable is contained within the function. If it is not contained, it is globally accessible. If a variable is undeclared, or referenced beyond it’s scope, it will throw a reference error:
var a = 'one';
function test(condition){
if(condition === true) {
var b = 'two';
}
console.log(b);
}
test(true);
console.log(a); // ouput> one
console.log(b); // b is not defined in the global scope
let
let
declares a variable statement that is contained within the enclosing block, expression or statement. let
is also contained within any sub-block.
let a = 'one';
function test(condition){
if(condition === true) {
let b = 'two';
}
console.log(a); // ouput> one
console.log(b); // b is not defined
}
test(true);
console.log(a); // ouput> one
console.log(b); // b is not defined in the global scope
This creates cleaner code as variables can be better contained.
Additionally, if the varaible is declared twice in the same block, and error will occur:
let a = 'one';
var test = true;
console.log(a);
if (test === true) {
let a = 'two';
console.log(a);
let a = 'three'; // Uncaught SyntaxError: Identifier 'a' has already been declared
console.log(a);
}
const
const
on the other hand creates a readonly declaration, meaning that it cannot be reassigned. const
also contains additional scoping limit where it is contained to the enclosing block:
const a = 'one';
var test = true;
console.log(a);
if (test === true) {
const a = 'two';
console.log(a);
}
console.log(a);
// output=> one
// output=> two
// output=> one