Есть ли подобие global из php в js?
В javascript область видимости строится на замыканиях (вложенности функций), есть три оператора объявления переменных:var - переменная будет видна в текущей функции и во всех функциях объявленных внутри текущей функции, включая те, что объявлены внутри вложенных функций, данное объявление всплывает на начало функции не зависимо где в функции оно произведеноlet - переменная будет видна в пределах текущего блока после ее объявления (не всплывает в отличии от var), а так же во всех вложенных в текущий блок блоках и функциях
Так же нужно отметить, что такое объявление произведенное в циклах создаст новую переменную на каждую итерацию циклаconst - все то же самое, что и для let + значение нельзя изменить
Важно отметить, что для объектов значением переменной является ссылка на объект, а не сам объект, то есть записать в такую переменную что-то еще нельзя, но состояние объекта менять можно
При обращении к переменной она сначала ищется в текущей области видимости, а если в текущей области такой переменной не объявлена, то производится поиск в области видимости выше.
Самой верхней областью видимости является глобальный объект, в нем поиск производится последним, если переменная не найдена и там, то будет возвращено значение undefined
Важно: в strict режиме (который рекомендуется включать всегда) нельзя использовать не объявленные переменные за исключением в операторе typeof
Многие среды исполнения js создают в глобальном объекте переменную содержащую ссылку на сам глобальный объект, например gui поток браузера создает несколько таких ссылок:window - глобальный объект текущего фрейма (вкладка браузера, попап-окно, iframe)top - глобальный объект самого верхнего фрейма (вкладки)parent - глобальный объект фрейма находящегося на уровень выше, либо равносильно top если текущий фрейм - вкладка браузера или попап-окноopener - глобальный объект фрейма, породившего текущую вкладку или попап-окно (может быть null, если текущая вкладка порождена самим браузером)
В webworker'ах и webextension'ах браузера ссылка на глобальный объект хранится в переменной self
В node.js - global
Универсальный способ получить глобальный объект в любой среде исполнения:function getGlobal() {
  return (new Function('return this'))();
}
P.S. использование глобальной области видимости - дурной тон
Все переменные в Js, объявленные вне функции являются свойствами глобального объекта (т.е. глобальными переменными)var x = 0;
function exp() { x = 1; };
alert(x);
exp();
alert(x)