Глобальные переменные в модуле, как оно работает?

На досуге решил освоить NodeJS. Сижу по тихоньку разбираюсь, читаю best practices.
Помогите до конца понять работу модулей и их импорт.

Я изначально их понимал как библиотеки, к которым обращаются чтобы выполнить код находящийся в них.
Но вот я наткнулся на статью https://www.terlici.com/2015/04/03/mongodb-node-express.html
Выходит что в модуле db.js есть глобальная переменная state, которая хранит экземпляр базы данных.
И этот экземпляр динамичен и не освобождается всё время пока работает программа.
Верно ли это?

Выходит, чтобы получить возможность шарить какой то объект(переменную) между разными модулями (например router1.js, router2.js) я могу создать модуль share.js с задеклорированными переменными в нём и импортить его. Это нормально?

Именно так.

Переменная существует в области видимости модуля (технически эта область видимости как бы определена функцией). Эту ситуацию называют замыканием (closure).

Нормально. Есть много случаев когда это нормально и желательно. Например для хранения всех констант. Или библиотеки функций. Для инстанса соединения с бд - такой подход тоже норм.

Разумеется, бывают случаи когда такой подход не норм. Пока учишься - спрашивай мнения о своем коде у более опытных ребят.

1 лайк