В ES5 есть две области видимости: глобальная и в пределах функции. В ES6 есть новая область видимости - облать ограниченная блоком кода, а именно: фигурными скобками. Для работы с ней имеется новое ключевое слово let, которую мы можем использовать для объявления новой переменной с ограниченной областью видимости.
if (true) {
var version_es5 = 'ES5';
}
console.log(version_es5); // ES5
if (true) {
let version_es6 = 'ES6';
}
console.log(version_es6); // ReferenceError: version_es6 is not defined
console.log(version_es5);
var version_es5 = 'ES5'; // undefined
console.log(version_es6); // ReferenceError: can't access lexical declaration `version_es6' before initialization
let version_es6 = 'ES6';
Более практичный пример:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 500);
}
// 5 5 5 5 5
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 500);
}
// 0 1 2 3 4