var | let | const | |
---|---|---|---|
global scoped | yes | no | no |
function scoped | yes | yes | yes |
block scoped | no | yes | yes |
can reassignable | yes | yes | no |
can be redeclarable | yes | no | no |
can be hoisted | yes | no | no |
Global Scoped :
Variables declared Globally (outside any function).
//var
a = 4;
var a;
console.log(a);
//let
a = 4;
let a;
console.log(a); // Uncaught ReferenceError: Cannot access 'a' before initialization
//const
a = 4;
const a;
console.log(a); // Uncaught SyntaxError: Missing initializer in const declaration
Function Scoped :
Variables defined inside a function are not accessible (visible) from outside the function.
//var
function myFunction() {
var a = 10;
}
myFunction()
console.log(a);
//let
function myFunction() {
let a = 10;
}
myFunction()
console.log(a);
//const
function myFunction() {
const a = 10;
}
myFunction()
console.log(a);
Block Scoped :
This scope restricts the variable that is declared inside a specific block, from access by the outside of the block.
//var
function myFunction () {
if(true) {
var a = 10; // it exists in function scope
}
console.log(a);
}
myFunction();
//let
function myFunction () {
if(true) {
let a = 10; // it exists in block scope
}
console.log(a);
}
myFunction();
//const
function myFunction () {
if(true) {
const a = 10; // it exists in block scope
}
console.log(a);
}
myFunction();
Can be reassignable :
//var
var a = 1;
a = 30;
console.log(a); // 30
//let
let b = 1;
b = 30;
console.log(b); // 30
//const
const c = 1;
c = 30;
console.log(c); // Uncaught TypeError: Assignment to constant variable.
Can be redeclarable :
//var
var a = 10;
console.log(a); // 10
var a = 12;
console.log(a); // 12
//let
let b = 10;
console.log(b); // 10
let b = 12;
console.log(b); // Uncaught SyntaxError: Identifier 'b' has already been declared
//const
const c = 10;
console.log(c); // 10
const c = 12;
console.log(c); // Uncaught SyntaxError: Identifier 'c' has already been declared
Can be hoisted :
//var
console.log(a);
var a = 10; // undefined
//let
console.log(b);
let b = 10; // Uncaught ReferenceError: b is not defined
//const
console.log(c);
const c = 10; // Uncaught ReferenceError: c is not defined