Scope — правила, где переменная/функция видима: глобально, внутри функции или внутри блока {}.
Подробности
Global — доступна везде (осторожно с загрязнением).
Function — var и объявления функций ограничены функцией.
Block — let/const/class ограничены блоком.
var globalVar = 'I am a global var';
functionmyFunction() {
var functionVar = 'I am a function-scoped var';
if (true) {
let blockVar = 'I am a block-scoped var';
console.log(globalVar, functionVar, blockVar);
}
// console.log(blockVar); // ReferenceError
}
Модули имеют собственную область верхнего уровня (не классический «глобал скрипта»).
Итог
Три уровня: global / function / block; современные переменные почти всегда block-scoped.