Вывод непредсказуем с глобальной переменной, если «что-то еще» помимо вашей функции yourfunc
изменяет значение глобальной переменной между вызовами на yourfunc
.
Но если переменная var
заключена в замыкание и доступна только для yourfunc
, ничто другое не имеет к ней доступа, поэтому не может ее изменить, поэтому выходные данные yourfunc
становятся полностью предсказуемыми аргументами yourfunc
и действиями yourfunc
(например, изменение мутированной переменной var
, что может быть сделано только изнутри yourfunc
).
Что повышает безопасность и чистоту, и в этом весь смысл того, чтобы затворы были в первую очередь.
Значение функции зависит от ее окружения, состоящего из ее аргументов и вложенных переменных.
Другое использование замыканий - когда вложенная среда имеет общий между несколькими функциями, так что только эти функции могут получать доступ и изменять значения вложенных переменных.
Наличие ненужных глобальных переменных, засоряет глобальное пространство имен и делает их ответственными за ошибочный доступ.