2011-10-28 14 views
1

私は同じようJSlint警告「var counterの再宣言」は必要ですか?

var counter = 0; 
var nameFlags = { 
Ashley : counter++ , 
Bronwyn : counter++ , 
Catherine : counter++ 
DakotaFanning : counter++ 
... 
}; 

オブジェクト新しいフラグを作成する場合には、カウンタがあると文句を言いそう

var counter = 0; 
var carFlags = { 
Audio : counter++ , 
Bentley : counter++ , 
Chrysler : counter++ 
Datsun : counter++ 
... 
}; 

後、私はいくつかの行の長さだスクリプトを持っていると私はのようなフラグの種類がたくさんありますより大きな声明の一部として使用されていますが、私はここで完全に受け入れられると思います。しかし、ここでは2回カウンターを使いましたので、redeclaration of var counterと警告しています。 var counterをページの先頭に移動することはできますが、それではcounterが使用されているかどうかはわかりにくくなる可能性があります。 varを複数回使用することに何か本当の問題はありますか?私はdelete counterステートメントを持っていたが、何もしなかった。 delete window.counterに変更する必要がありますか?

答えて

1

ありませんが、問題ありません。実際、Javascriptでは変数の宣言(var)は自動的に囲まれたスコープの上部に吊り下げられます。たとえば、次のよう

var n = 5; 
if (n < 3) { 
    var q = 2; 
    var n = 4; 
} 

は同等です:

var q, n=5; 
if (n < 3) { 
    q = 2; 
    n = 4; 
} 
+0

ので、その後の分岐文はのように変数のスコープを(構成しない場合C/C++)? –

+0

@StefanMajewsky JavaScriptの変数はif文のthen-branchのようなコードブロックにスコープされません。 JavaScript変数は、関数またはグローバルスコープに対してのみ有効です。 –

1

は彼らに固有の名前を付け、あなたは問題ありません。

var carCounter = 0; 
var nameCounter = 0; 

2つの異なるタスクで同じ変数を使用したため、バグを見つけるのが難しくなります。

+2

良いアドバイス。しかし、あなたが2つの(ネストされていない)forループを持っていれば、あなたは1つの 'var i'ともう1つの' var j'を名づけるべきですか? – puk

3

私はここにあなたの範囲についてはかなりわからないが、それがグローバルスコープの場合、その後delete counterは確かに何もしないでしょう。また、delete window.counterは必要ありません。これは、とにかく同じことです(グローバルスコープのブラウザ環境にいる場合)。

変数を再使用したい場合は

は - シンプルな割り当てはどうなる:

counter = 0 

JSLintは、私はあなたがカウンターを再利用することを意図している可能性があることを警告する、と信じて、ある不平を言う理由は誤ってタイプしたvar(2回以上私に起こった)。

同じ変数を2度宣言することには全く問題ありません(ページを読み込むときにユーザーのブラウザをダウンロードする必要があるJSファイルのサイズをわずかに増やすことと同じです)は同じスコープでです。

EDIT:

あなたが同じ名前を使用する理由の質問は、当然のことながら、そこにある...

関連する問題