関数スコープ内でvarで宣言しない変数に値を代入すると、グローバルスコープのプロパティとして定義されます。
1つめのhogeではmoge関数内で値代入したmageがグローバルスコープに定義されています(変数ではなくプロパティに追加されます。
2つめのfooではboo関数内でvar宣言&値代入したbarが関数内スコープとして定義されているので、グローバルスコープからはアクセスできていません。
2つめの動作が当たり前な気がするのですが、そうではないので要注意です。というか、変数を使用する場合はvarで宣言するようにしないと危険と言えます。
ちなみに”use strict”するとvar宣言無しの変数は使用できなくなります。この方が堅牢性的にはよろしいと思います。