LINUX.ORG.RU

История изменений

Исправление no-such-file, (текущая версия) :

Опасность глобальных переменных, как раз в том, что их может перегрузить какой-то сторонний скрипт

Нет, «опасность» не в этом, а в том, что они добавляют «состояние» для программы. Т.е. твоя функция может вести себя по-разному в зависимости от глобальных переменных и два вызова foo() и foo() могут работать по-разному. Это затрудняет отладку и «аргументацию» при разборе работы программы, особенно если есть взаимные зависимости между вызовами функций и изменением состояния. В таких случаях нужно не просто видеть код, чтобы понять как он работает, а прослеживать разные варианты вызовов - что за чем вызывается, в какой последовательности и т.п. (делать трассировку в уме). Получается такой себе лапше-goto на стеройдах.

По твоей логике любая переменная из вышестоящего скоупа это тоже глобальная переменная.

Нет, только из одного специального скоупа. И нужно это для того чтобы передавать в функции какие-то глобальные ресурсы (типа window). Иначе пришлось бы в каждую функцию пихать объекты «верхнего» скоупа как параметры.

Исходная версия no-such-file, :

Опасность глобальных переменных, как раз в том, что их может перегрузить какой-то сторонний скрипт

Нет, «опасность» не в этом, а в том, что они добавляют «состояние» для программы. Т.е. твоя функция может вести себя по-разному в зависимости от глобальных переменных и два вызова foo() и foo() могут работать по-разному. Это затрудняет отладку и «аргументацию» при разборе работы программы, особенно если есть взаимные зависимости между вызовами функций и изменением состояния. В таких случаях нужно не просто видеть код, чтобы понять как он работает, а прослеживать разные варианты вызовов - что за чем вызывается, в какой последовательности и т.п. (делать трассировку в уме). Получается такой себе лапше-goto на стеройдах.

По твоей логике любая переменная из вышестоящего скоупа это тоже глобальная переменная.

Нет, только из одного специального скоупа.