Блочная область видимости
«Область видимости — часть программы, в которой доступна переменная.»
Почему var нежелателен (4 проблемы)
// 1. Допускает повторное объявление
var x = 1
var x = 2 // ОК — запутывает!
// 2. Игнорирует блоки
if (true) { var leaked = 1 }
console.log(leaked) // 1 — утекла из блока!
// 3. Hoisting — доступна до объявления
console.log(y) // undefined (не ошибка!)
var y = 5
// 4. Только функциональная область видимости
let и const (ES6)
// Блочная область видимости
if (true) {
let blockVar = 'внутри'
const blockConst = 'тоже внутри'
}
// console.log(blockVar) // ReferenceError!
// Нет hoisting
// console.log(b) // ReferenceError
let b = 5
// Нет повторного объявления
let c = 1
// let c = 2 // SyntaxError
Глобальная vs локальная область видимости
const global = 'я глобальная'
function example() {
const local = 'я локальная'
console.log(global) // доступна
console.log(local) // доступна
}
console.log(global) // доступна
// console.log(local) // ReferenceError