28404


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

例a

[code]

    var i = 0;
    for (; i < num; i++) {}
    
[/code]

例b

[code]

    var i;
    for (i = 0; i < num; i++) {}
    
[/code]

* * *

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

[code]

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


CC BY-SA 3.0
2016-08-21T02:20:12.720
28402
2016-08-21T04:00:31.723
7886
question
javascript
for文のvar宣言 ／ 配列を追加する際、pushを使用せずlengthを使用するメリットは何かあるのでしょうか？


[JavaScriptの変数のスコープは関数単位](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/var)です。`var`に関しては関数内のどこに記述しても意味は同じです。ですので残りは`i
= 0`がいつ実行されるかの違いでしかなく、for前・for内のどちらに記述するかは好みで判断してください。

* * *

[JavaScriptの配列](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array)は特殊です。仕様上、配列のインデックスは数値ではなく文字列なので例えば`hoge["abc"]`とすることも可能です。  
その上で、[Array.push](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/push)は複数の引数を受け配列に追加する関数ですので、１引数に限定するのであれば`hoge[index]`とインデックスアクセスの方が高速化されるのかも？と考えることはできます。  
と答えはしましたが質問2に関してはメリットはよくわかりません。


CC BY-SA 3.0
2016-08-21T04:00:31.723
28404
2016-08-21T04:00:31.723
4236
28402
answer