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