変数に限らず、シンボルのスコープは適切じゃないと。
広すぎても狭すぎてもいけない。
アプリの環境設定値をローカル変数でたらい回しされても困るし、直接呼び出せない手続き間のデータ交換のためにグローバル変数を使われても困る。
そもそもグローバル変数がいけないのは代入・更新がいたるところでされるから。
「使用できる範囲が広いから」ではない。
だって、ローカル変数でも「一時変数は悪」でしょ。
適用範囲が狭くても、一意ではない変数は可読性を下げる。
つまり、1つの変数を複数の型*1として使うことと、代入を繰り返すことが悪だということ。
代入を繰り返せないシンボル…定数が悪じゃないのはどうしてかを考えれば、「グローバル変数だから悪」というのは根拠のないでっち上げだと分かるはず。