Все остальные уже упоминали загрязнение имен golbal и global is evil , даже OP:
Или это загромождает глобальный охват ...
но есть еще одна причина.
Существует только один экземпляр глобальной переменной.Это делает его плохо масштабируемым.Если в какой-то момент в будущем вам понадобится более одного экземпляра объекта, вам придется либо создать вторую глобальную переменную, либо преобразовать исходную переменную в массив и управлять этим массивом вручную (т. Е. Самим решать, когда удалять объектиз памяти).
Если оно уже создано замыканием, то создание второго, третьего и четвертого экземпляров можно просто выполнить, вызывая функцию, которая создает замыкание снова и снова.Вы также получаете дополнительный бонус за то, что все созданные экземпляры автоматически собирают мусор, когда он больше не нужен.
Такая ситуация случается чаще, чем вы думаете.Представьте, что вы только что создали анимационную последовательность, например, анимирующую текст, который постепенно исчезает.И вы использовали глобальную переменную для отслеживания некоторого состояния анимации.И ты думаешь, что это здорово, и все хорошо, и забудь об этом.Затем через некоторое время к вам приходит ваш босс и говорит, что ему нравится анимация, и он хотел бы добавить ее к другим элементам на странице.Теперь вам нужно иметь дело с обработкой нескольких анимаций одновременно, и вам нужно преобразовать этот глобальный объект в массив, чтобы предотвратить затирание одной анимацией другой текущей анимации ... если бы они только были заключены в замыкания для начала ...
И что вы знаете, так же, как я прокручивал вниз после того, как отправил этот ответ, я нашел вопрос, иллюстрирующий проблему с глобальными переменными: Как вы создаете несколько таймеров на одной странице, которые работают независимо - javascript?.Хотя для этой конкретной проблемы вам не нужно замыкание, просто старые локальные переменные.