2016-04-25 3 views
4

質問があります。その変数iが掲揚された後ループと巻き上げの場合

for (var i = 0; i < some_length; i++) { 
    /* some code */ 
} 

:たとえば
は、私はこのようなforループを使用します。
私は常にiという変数をスコープの先頭に宣言する必要がありますか?

var i; 

for (i = 0; i < some_length; i++) { 
    /* some code */ 
} 

UPD:
私は両方のループが同じように動作していることを知っています。
どちらが正しいのですか?

+3

どちらも同じことを意味します。最初の方が読みやすくなります。 – gurvinder372

+0

そして、 'function-block'でラップされたときには、もっと意味があります。 – Rayon

+1

"スコープの始めに変数を宣言しなければならないということを意味するのでしょうか? " - それは意見の問題です。コンパイラに関する限り、違いはありません。 – Quentin

答えて

7

最新のJavaScriptはblock scopingからletまでをサポートしています。

for (let i = 0; i < some_length; i++) { 
    /* i is defined here */ 
} 
/* i is not defined here */

元の疑問に戻る:どの例が正しいですか?

私は、2番目のものはエラーが起こりにくいと主張します。

+0

リンクはパスワードで保護されています。 –

+0

修正しました、ありがとう! –

2

例では、最初のものはイテレータ変数の古典的な型宣言です。他のケースでは、多くの関数/オブジェクト/変数を操作する場合など、スコープ/オブジェクト/関数の先頭にすべての変数を宣言することをお勧めします。

コードがこのように書いているのを見ると、将来は何が起こっているのかが分かりやすくなります。最初の10〜15行のコードを見るだけで、内部のすべての変数を検索することはありません。すべてがコードの冒頭で説明されます。

+1

しかし、あなたの最初の例はFOR LOOPでより正確です。そのカジュアルな宣言は多くの言語であります。 –

関連する問題