質問1.for文のvar宣言について
・下記ループでどちらが良いとかありますか?
・それぞれメリットデメリットがあれば教えてください
・何れにしても、for文の中でvar宣言するよりは良い?

例a

var i = 0;
for (; i < num; i++) {}

例b

var i;
for (i = 0; i < num; i++) {}

質問2.配列への追加について
・下記コードは、配列へ追加していると思うのですが、どうしてpushを使用していないのでしょうか?
・lengthを使用する理由(メリット)としては何が考えられるでしょうか?
・最後に追加してもインデックスを指定して追加しても、結局は同じ結果を得られるから気にする必要はない?

var hoge    = [];
function userFunc(num) {
    var i = 0;
    for (; i < num; i++) {
        hoge[hoge.length] = new Hoge();
    }
}