Всем давно и доподлинно известно, что использовать глобальные переменные в JavaScript не принято. Почему? Существует масса причин, все они, конечно же, глупы, но давайте придерживаться такой теории.

Однако иногда возникает необходимость иметь и пользовать глобальную переменную. Но как тогда быть? А если вдруг мы пишем для Node.js, там ведь нету глобального объекта window, там root? А если я хочу использовать свой код и во фронтенде и на сервере?

За сим предлагаю такое решение, которое знатно растиражированно, но никто о нем никогда не помнит.

var global = (function () {
    return this || (1, eval)('this');
}());

Теперь у нас есть глобальный объект global, который обладает всеми свойствами window / root. Элегантное и просто решение.

Придумал не я, украл вот тут.