まあ、コードで書くと

//ケース1
//fooの処理も実行されるがHogeのソースかドキュメントを読まないとわからない
hoge.unko();

//ケース2
//fooが使用されていることが見た目に明らか
hoge.unko(foo);

これのどっちがソース的にいいかっていったら間違いなくケース2だろ?
ケース1はやってはいけないことだ
これはC言語の時代から同じな

グローバル変数・関数がダメな理由といっしょだ
っていうかこのグローバル変数がダメな理由っていうのはちゃんと覚えておいたほうがいい
同じ害が出るものもちゃんとわかるようになるし
もちろんシングルトンとかも同様に駄目