Var | Let | Const |
Variable can be either Global Scope or Local Scope | Variable is Local scope | Variable is Local Scope |
Re-Declaration or Updating of variable is possible | Only Updating possible | Nothing is possible. |
Hoisting allowed – Variables initializes with “undefined” | Hoisting allowed – Variables not initializes with values. | Hoisting allowed – Variables not initializes with values. |
Can be declared without being initialized | Can be declared without being initialized | Must be initialized with value at the time of declaration. |
Clear explanation about Var, Let and Const:
Var: var declarations are globally scoped or locally scoped.
var x = 10;
function myFun()
{
var y = 20;
}
var variables can be re-declared:
var x = 10;
var x = 20;
Display the value of re-declared variable as follows:
var x = 10;
var times = 4;
if (times > 3)
{
var x = 20;
}
console.log(x) // display 20
Hoisting of var: variables and function declarations are moved to the top of their scope before code execution.

Let: let is block scope. So a variable declared in a block with let is only available within block.
let x = 10;
let times = 4;
if (times > 3) {
let y = 20;
console.log(y); // 20
}
console.log(y) // y is not defined
let can be updated: | but not re-declared: |
let x = 10; x = 20; | let x = 10; let x = 20; // error: already declared |
However, if the same variable is defined in different scopes, there will be no error:
let x = "say Hi";
if (true)
{
let x = "say Hello instead";
console.log(x); // "say Hello instead"
}
console.log(x); // "say Hi"
Hoisting of let: Just like var, let declarations are hoisted to the top. Unlike var which is initialized as undefined, the let keyword is not initialized. So if you try to use a let variable before declaration, you’ll get a Reference Error.
Const:
- Variables declared with the const maintain constant values.
- const declarations are block scoped
- const cannot be updated or re-declared
const x = "say Hi";
x = "say Hello instead";// error: Assignment to constant variable.
Note: Every const declaration, therefore, must be initialized at the time of declaration.
Hoisting of const: Just like let, const declarations are hoisted to the top but are not initialized.