So the differences in let, const and var were the one thing about es6 that I thought I was somewhat familiar with going into this course. Having said that, the first lesson threw me for a loop as I initially understood it.
I browsed through the forum and think I figured it out, but just to clarify, “let” can’t be declared a second time but you can change its value later by simply saying “someLet = value” where as const can neither be declared a 2nd time nor can its value be changed?
Then of course “var” can be declared a 2nd time, “var someVar = value”, and thus overwritten entirely in this way. Sound correct?
Your browser information:
User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15.
The rule that prevents you redeclaring let/const cuts down on programmer errors and should make the code a tiny bit faster (computer doesn’t have to do any extra work just in case a variable is redeclared in scope).
const cannot be reassigned, which is subtly different to just the value not being changed - for things like strings and numbers (primitives), yes, it means the value cannot change. But for objects (Objects, Arrays etc), the reference to the actual object assigned to const can’t change, but the values inside the object can (it’s still the same object though):
const foo = [1,2];
foo[0] = 100; // this works
foo[1] = 200; // this works
foo = [1,2]; // this blows up
let and const are block level scope. So both are same with respect to scoping.
let x =6;
const y = 13;
{
let x=5;
const y = 10;
console.log(x) // 5
console.log(y) // 10
}
console.log(x) //6
console.log(y) //13
So where they differ? Answer is You can’t reassign const variable within scope.
{
const x =13;
x =45 // faill //TypeError: Assignment to constant variable.
}
Now come to var old way of declaring variable. var is function level scoping.
var x = 23;
(function myFunc() {
var x = 5;
console.log('func',x); //func 5
{
let x = 12;
console.log('block',x); //block 12
}
console.log('after block',x); //after block 5
})()
console.log(x); // any guess?? // 23
Ok, the way I first read it was that you couldn’t change the value of let after it had been declared, making it seem like const and let where redundant declarations. I understood the part about scope, I was just trying to clear up this one specific point. Think the mdn docs were the first source I read on the subject, the reason I thought to question my initial interpretation of the lesson to begin with.