What is the difference between 'let' and 'const' ECMAScript 2015 (ES6)?
What you're seeing is just an implementation mistake. According to the ES6 spec wiki on const
, const
is:
A initialize-once, read-only thereafter binding form is useful and has
precedent in existing implementations, in the form of const
declarations.
It's meant to be read-only, just like it currently is. The ES6 implementation of const
in Traceur and Continuum are buggy (they probably just overlooked it)
Here's a Github issue regarding Traceur not implementing const
What is the core difference between using of (let) and (const) when we declare of a variable in javascript ES6 (ES2015)?
The similarity between let
and const
is that they both have block scope. It means they are only available in the block they are declared.
Difference between them is that variables declared with let
can be assigned a new value but variables declared with const
cannot be assigned a new value.
let x = 3;x = 'changed';
const y = 33;y = 'changed' //throws error.
What is the difference between let and var?
Scoping rules
The main difference is scoping rules. Variables declared by var
keyword are scoped to the immediate function body (hence the function scope) while let
variables are scoped to the immediate enclosing block denoted by { }
(hence the block scope).
function run() {
var foo = "Foo";
let bar = "Bar";
console.log(foo, bar); // Foo Bar
{
var moo = "Mooo"
let baz = "Bazz";
console.log(moo, baz); // Mooo Bazz
}
console.log(moo); // Mooo
console.log(baz); // ReferenceError
}
run();
for...of loop. Should I use const or let?
Why use
const
and when to uselet
infor...of
loops?
If there are no assignments to the identifier within the loop body, it's a matter of style whether you use let
or const
.
Use const
if you want the identifier within the loop body to be read-only (so that, for instance, if someone modifies the code later to add an assignment, it's a proactive error). Use let
if you want to be able to assign to it (because you have an assignment in your code, or you want someone to be able to add one later without changing the declaration).
You can do this with for-of
and for-in
loops. A for
loop's control variable is normally not constant (since in the normal case you update it in the "update" clause of the for
; if you don't, for
may be the wrong loop to use), so you normally use let
with it.
For clarity, here's an example with an assignment within the loop body:
for (let str of ["a", " b", " c "]) {
str = str.trim();
// ^^^^^----- assignment to the identifier
console.log(`[${str}]`);
}
const vs let when calling require
const
can be normally used when you don't want your program
to assign anything to the variable
"use strict";
const a = 1;
a = 2;will produce
TypeError: Assignment to constant variable.
.to use the variable without explicitly initializing.
"use strict";
const a;will produce
SyntaxError: Unexpected token ;
Simply put, I would say,
use
const
whenever you want some variables not to be modifieduse
let
if you want the exact opposite ofconst
use
var
, if you want to be compatible with ES5 implementations or if you want module/function level scope.
Use let
only when you need block level scoping, otherwise using let
or var
would not make any difference.
Related Topics
Firebase.Database Is Not a Function
React - Changing an Uncontrolled Input
Youtube Iframe Player API - Onstatechange Not Firing
Why Is It Frowned Upon to Modify JavaScript Object's Prototypes
React - User-Defined Jsx Components Not Rendering
How to Set Header and Options in Axios
Ruby on Rails 4 JavaScript Not Executed
How to Format a Utc Date as a 'Yyyy-Mm-Dd Hh:Mm:Ss' String Using Nodejs
Adding/Removing Items from a JavaScript Object with Jquery
Chrome Extension - Get Dom Content
Ruby Hash Equivalent of JavaScript's Object Initializer Es6 Shorthand
Difference of the Value, Prototype and Property
What Is the Lifecycle of an Angularjs Controller
Mixing Jsf El in a JavaScript File