複数の変数に対して 1 つの var 宣言を使用し、各変数を改行で宣言することが良いプログラミング動作であると考える理由を誰か教えてもらえますか?
// bad
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z';
// good
var items = getItems(),
goSportsTeam = true,
dragonball = 'z';
複数の変数に対して 1 つの var 宣言を使用し、各変数を改行で宣言することが良いプログラミング動作であると考える理由を誰か教えてもらえますか?
// bad
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z';
// good
var items = getItems(),
goSportsTeam = true,
dragonball = 'z';
それは「良い」または「悪い」とは見なされません。それは好みの問題です。
コード品質ツール JSLint を作成した Douglas Crockford は、これを気に入っています。
それが持っているかもしれない1つの「利点」は、可変巻き上げの可能性を回避することです。JavaScript では、すべてのvar
宣言が自動的にスコープの先頭に移動します。
Crockford 氏が 2 番目のオプションの方が優れていると考える理由は次のとおりです。
ブロック スコープを持つ言語では、通常、最初に使用する場所で変数を宣言することをお勧めします。ただし、JavaScript にはブロック スコープがないため、関数のすべての変数を関数の先頭で宣言する方が賢明です。関数ごとに 1 つの var ステートメントを使用することをお勧めします。これは vars オプションで拒否できます。
主な利点 (スタイルの好みは別として) は、意図しない変数巻き上げの結果に苦しむコードを作成するのを防ぐことができることです。
次の例を見てください。
var foo = function(){alert('foo');}
function bar(){
foo();
var foo = function(){alert('foobar')};
foo();
}
bar();
このコードを読むと、 の意図はbar
次のようになります。
foo
関数を呼び出して文字列を警告します'foo'
。foo
。foo
関数を呼び出して文字列を警告します'foobar'
。実際には、次のようになります。
foo
はbar
関数の先頭に巻き上げられます。foo
同じ名前の外部変数ではなく、実際にはローカル変数を参照するようになりました。しかし、ローカルはまだ割り当てられていないため、その値は未定義です。したがって、 を呼び出そうとするとfoo
、TypeError が返されます。