What's the difference between var, let and const keywords?
Ankit Kumar
Posted on June 12, 2021
JavaScript has three ways to declare variables.
var width = 100;
let height = 200;
const key = "Tech Talks";
var
- The scope of a variable defined with the keyword “var” is limited to the “function” within which it is defined.
- If it is defined outside any function, the scope of the variable is global.
-
var
isfunction scoped
Block Example
{
var a = 10;
console.log(a);
} //block 1
{
a++;
console.log(a);
} //block 2
- We are using the keyword
var
to define thevariable a
, the scope of a is limited to the function within which it is defined. - Since a is not defined within any function, the scope of the
variable a
is global, which means that a is recognized within block 2
Function Example
function fun1() {
var a = 10;
console.log(a);
} //function scope of fun1
function fun2() {
a++;
console.log(a);
} //function scope of fun2
- Since we have enclosed
fun1
andfun2
, within separate functions, the scope ofvar a=10
, is limited tofun1
anda
is not recognized infun2
.
let:
- The let keyword was introduced as part of ES6 syntax, as an alternative to var to define variables in Javascript.
- The scope of a variable defined with the keyword
let
orconst
is limited to theblock
defined by curly braces i.e. {} -
let
isblock scoped
.
Block Example
- Let us rewrite the code using the keyword
let
{
let a = 10;
console.log(a);
} //block 1
{
a++;
console.log(a);
} //block 2
- Since we are using
let a=10
, scope ofa
is limited toblock 1
anda
is not recognized inblock 2
Function Example
function fun1() {
let a = 10;
console.log(a);
} //function scope of fun1
function fun2() {
a++;
console.log(a);
} //function scope of fun2
- Since we have enclosed fun1 and fun2, within separate functions, the scope of
let a=10
, is limited to fun1 and "a" is not recognized in fun2.
const:
- If a variable is defined with keyword const, it cannot be reassigned.
- If a variable is defined using the const keyword, its scope is limited to the block scope
- It is important to understand that const does NOT mean that the value is fixed and immutable.
- It CAN be mutated.
Example
{
const a = 10;
console.log(a);
} //block 1
{
a++;
console.log(a);
} //block 2
Since we are using
const a=10
, scope of "a" is limited to block 1 and "a" is not recognized in block 2.Example to show that the value of the variable defined within the const keyword is mutable, i.e. it can be changed
{
const a = [1, 2, 3];
const b = { name: "hello" };
a.push(4, 5); //mutating the value of constant "a"
b.name = "World"; //mutating the value of constant "b"
console.log(a); //this will show [1,2,3,4,5]
console.log(b); //this will show {name: "World"}
}
This code will run without any errors, and shows that we CAN mutate the values that are defined by "const"
Note that these variables defined by const cannot be re-assigned
{
const name = "Tech Talks";
const PI = 3.14;
const a = [1, 2, 3];
const b = { name: "Hello" };
name = "Ankit Kumar"; //Throws an error, since we are attempting to re-assign "name” to a different value.
PI = PI + 1; //Throws an error, since we are attempting to re-assign PI to a different value.
a = [1, 2, 3, 4, 5]; //Throws an error, since we are attempting to re-assign "a" to a different value.
b = { name: "Hello Ankit" }; //Throws an error, since we are attempting to re-assign "b" to a different value.
}
Summary
var:
- function scoped
- undefined when accessing a variable before it's declared
let:
- block scoped
- ReferenceError when accessing a variable before it's declared
const:
- block scoped
- ReferenceError when accessing a variable before it's declared
- can't be reassigned
Also, to be notified about my new articles and stories:
Subscribe to my YouTube Channel
Follow me on Medium, Github, and Twitter.
You can find me on LinkedIn as well.
I am quite active on Dev Community as well and write small topics over there.
If you are Instagram person, follow me here
Posted on June 12, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.