Читаю на известном всем сайте-учебнике по JavaScript:
В браузере глобальные функции и переменные, объявленные с помощью var (не let/const!), становятся свойствами глобального объекта
Потом приводится следующий пример:
var gVar = 5;
alert(window.gVar); // 5 (становится свойством глобального объекта)
Если бы мы объявили переменную при помощи let, то такого бы не произошло:
и далее снова пример:
let gLet = 5;
alert(window.gLet); // undefined (не становится свойством глобального объекта)
Но мне не совсем понятно, почему так происходит. По идее
let-переменные ограничиваются блоком кода. Если такая переменная объявлена вне блоков кода, то она должна быть ограничена только самим скриптом (по логике). Тогда почему
let-переменная не становится глобальной для всего скрипта (не становятся свойствами глобального объекта)?