Ну тут вы правы, я в основном пишу на других языках, подчиняющихся общим стандартизированным правилам работы с переменными. Не могу даже припомнить где еще подобная реализация работы с переменными была... хотя вроде в начальных версиях фортрана, была схожая реализация. Ну да ладно, принял к сведению эту информацию.
Кликер ориентирован на новичков, всё упрощённо. Поэтому все переменные глобальные. Области видимости не вводились как раз для лёгкости понимания не программистами.
У автора вечная борьба
бобра с ослом простоты и функциональности.
Ну вот версия программы доросла до передачи параметров в подпрограммы... Тут было "два путя":
либо вводить разделение областей видимости переменных - глобальных/локальных/локальных потока..., что тянет создание новых операторов принудительного задания области видимости. Что усложняет "учебную курву" (learning curve), а на это автор не мох пойти
ть;
либо забить и оставить всё глобальным. Но тут же возникает проблема, что параметры в ПП перезатрут переменные и больше того, оставят новое значение. Автор решил их при выходе удалять.
Новичкам и так и так плохо, их переменные портятся. Явно они их не меняют присваивая значения, поэтому проблему найти не могут.
Оба варианта удалять/не удалять плохие, какой бы не выбрали. Но этот проще отловить. Вот и ты отловил. И все здесь присутствующие сразу на это напоролись. А если бы где-то молча менялись переменные, отловить было бы сложнее. Потом, просто запоминаешь, что имена параметров должны быть уникальные и всё, костыль вставлен.
Да, в других языках я такого не видел, но там нет либо одного, либо другого. А попытка скрестить слона с носорогом приводит к таким вот вопросам.