You can list out the differences in a tabular format
var | let |
---|
It is been available from the beginning of JavaScript | Introduced as part of ES6 |
It has function scope | It has block scope |
Variables will be hoisted | Hoisted but not initialized |
Let's take an example to see the difference,
function userDetails(username) {
if (username) {
console.log(salary); // undefined due to hoisting
console.log(age); // ReferenceError: Cannot access 'age' before initialization
let age = 30;
var salary = 10000;
}
console.log(salary); //10000 (accessible due to function scope)
console.log(age); //error: age is not defined(due to block scope)
}
userDetails("John");