> -- Иван Кузьмицкий писал(а):
> Я вот всегда рассматривал локальные переменные, как изолированные от основной программы. Для меня это способ обеспечить безопасность кода. Смысл этих переменных ограничен границами процедуры. Поскольку переменные локальные, то за пределами процедуры они смысл теряют.Теперь, оказывается, могут быть такие , которые могут этот смысл передать наружу. Для меня (лично для меня), это непонятно. Зачем заключать внешний смысл в скорлупу, которая предназначена для хранения только внутренних смыслов?
Иногда это может быть нужно...
Если сравнивать с ООП, то экспортируемые поля объекта тоже как-бы передают наружу некий внутренний смысл...

В чистых функциональных языках переменные константны (то есть являются переменными в математическом смысле, а не в привычном программистском), так что выдавать их наружу вполне безопасно.
А, например, в гибридном F# компилятор запрещает помещать внутрь лямбды мутабельные переменные, видимо для предохранения от таких побочных эффектов. Хотя ввод-вывод разрешает, т.е. неполная защита...