ES6 - Let and Const
Let and Const
let and const are two new identifiers for storing values in ES6 which you can additionally use to declare variables
‘let’ and ‘const’ throw more exceptions as they behave more strictly than ‘var’
letis block scoped and is hoisted to the top of it’s block, unlikevarwhich is hoisted to the top of it’s function or scriptconstis also block scoped and is also hoisted to the top of it’s block- it’s worth noting that in ES6 functions are block scoped instead of lexically scoped
‘var`
- it’s worth noting that in ES6 functions are block scoped instead of lexically scoped
letdoes not create a property on the global objectconstcreates immutable variables, whilstletcreate mutable ones- a duplicate declaration of
letwill throw a Reference Error within a block or function- this is also known as
TDZor temporal dead zone
- this is also known as
- Basic rules to follow:
- don’t use
var, or leave it as a signal in untouched legacy code. - use
letwhen you want to rebind. - prefer
constfor variables that never change. - don’t blindly refactor legacy code when replacing
varwithletandconst.
- don’t use
How let works:
function myfunc() {
if ( true ) {
let x = 54321;
}
console.log( x ); // => ReferenceError: x is not defined
}
// legacy ES5
function myfunc() {
if ( true ) {
var x = 54321;
}
console.log( x ); // => 54321
}
Using block scoped let:
let outer = "outer";
{
let inner = "inner";
{
let nested = "nested"
}
console.log( inner ); // => you can access `inner`
console.log( nested ) // => throws error
}
// you can access `outer` here
// you cannot access `inner` and `nested` here
More scoping rules for variables declared by let. you can clearly see that when refactoring:
function letBlocks {
let a = 23;
if ( true ) {
let a = 56;
console.log( a ); // => 56
}
console.log( a ); // => 23
}
How const works. Variables declared with const are immutable, but note that the values aren’t just the declarations:
const foo = '123';
foo = '321';
console.log( foo ); // TypeError
// changing const values
const myarr = [1,2,3,4];
myarr.push(5);
console.log( myarr ); // => 1, 2, 3, 4, 5
const obj = {};
obj.prop = 123;
console.log( obj ); // => { Object: prop: 123 }