Perche' le variabili globali, essendo appunto globali, possono essere modificate in qualsiasi punto ed e' molto difficile il debug se sorgono problemi. Se usi variabili private, sei sicuro che le funzioni non possano modificare nulla al di fuori del loro campo di azione, con variabili globali una funzione puo' modificare il comportamento di tutto lo script. E ti assicuro che certe volte e' un inferno trovare il bug.
Se una funzione fa solo il suo lavoro senza "effetti collaterali" lo sviluppo e' molto piu' ordinato e mantenibile.