Global — видно отовсюду. Function — только внутри функции (var). Block — только внутри {} (let/const).
Подробности
var globalVar = "I'm global";
functionmyFunction() {
var functionVar = "I'm in a function";
if (true) {
let blockVar = "I'm in a block";
console.log(blockVar); // ок
}
// console.log(blockVar); // ReferenceError
}
// console.log(functionVar); // ReferenceError
var «пробивает» блок if/for и живёт на уровне функции — одна из причин предпочитать let/const.
Итог
Область видимости сужается: global ⊃ function ⊃ block; тип объявления определяет границы.
Чем отличаются global, function и block scope? · Sobeso