Versión corta: cuando facilita razonar sobre el programa. Por lo general, los casos son algún tipo de estado global o recurso estático que se usa ampliamente.
Versión larga: Tom Hawtin dijo "con una acción espeluznante a distancia" ... ese es exactamente el problema con los globales: tienes que saber dónde se está usando y cómo, o puedes conseguir algo realmente extraño y difícil de rastrear loco. Los locales no son más ni menos que una estrategia para reducir el alcance de lo que el programador necesita comprender para razonar sobre el programa.
Otro lado del problema de saber dónde se usan es que puede terminar con globals duplicados, en cuyo caso las cosas pueden ponerse realmente extrañas a medida que la mayoría de los programas obtienen y establecen var1 mientras que en un par de lugares se usa var2 para mantener La misma información. Particularmente cuando varias personas están trabajando en el mismo código. Los IDE pueden ser útiles para encontrar el uso que reduce el costo de los globales, pero no hacen nada por los duplicados.
Mientras más globales tenga, más difícil será hacer un seguimiento de lo que sucede con ellos. Deben ser pocos y distantes entre sí.