2011-06-20 15 views
1

は、だから私はJavaScriptでいくつかのものをプログラミングして、いくつかの時間後、私は、私は次のコードにタイプミスをした見た:lがそこにあることを想定されていないかJavascriptの奇妙な構文

(function() { 

    var someEl = document.getElementById('id-of-some-el'),l <----- 
     someOtherEl = document.getElementById('some-other-el'); 

    someEl.onclick = function() { 
     ... 
    }; 

})(); 

は注意してください。私はFirefoxでこれをテストしてみたけど、なぜ私は構文エラーを取得していませんか?

+2

だけの推測が、私はあなたがコンマを使用してjavacriptに複数の変数を定義することができると思います。だから基本的には、変数someElを定義して値を設定して初期化し、変数lを作りました。 – fin1te

+0

@ fin1te:しかし、 'l'を宣言してもセミコロンは入れませんでした。構文エラーではありませんか? – Kevin

+0

[Nope](http://inimino.org/~inimino/blog/javascript_semicolons)。 :) –

答えて

4

あなたはvar -statement内部に2つの変数を作成しようとしていた。

var someEl = document.getElementById('id-of-some-el'), 
    someOtherEl = document.getElementById('some-other-el'); 

コンマの導入は、あなたがsomeEllを作成したことを意味:で

var someEl = document.getElementById('id-of-some-el'),l 

セミコロンJSラインの終わりはオプションですので、今、あなたはその後、コードの明確な、二行目を持っている:

someOtherEl = document.getElementById('some-other-el'); 

そして、あなたが明示的var(あなたのプログラムにわずかに異なる意味をimbuingが)それらを-ingせずに変数に割り当てることができるので、これは有効です。 someEllsomeOtherEl

新しい行は、このインスタンスで新しいステートメントを表し:

+0

"var"が暗黙的にグローバルとして宣言されていないと、追跡するのが大きな苦痛になる可能性があります。 – jishi

+0

@jishi:はい、それは可能ですし、悪いことに、他の場所で既に宣言されている変数を上書きするかどうかはわかりません!すごい! –

1

セミコロンで行を終了以来、このコードは次のように評価されている必須ではありません。

var someEl = document.getElementById('id-of-some-el'), l; 
someOtherEl = document.getElementById('some-other-el'); 
1

セミコロンは必須ではありませんので、それは有効です。

someEllはローカル変数になり

someOtherElそれが今未定義だろう何のVAR

lを持っていないので、グローバルになります。それを見るために

使用コンソール/警告。

var a,b,c; 
alert(a); 
0

誤って三つの変数を作成しました。

あなたが同じ行にそれらのすべてを置く場合、例えば:

var someEl = document.getElementById('id-of-some-el'),l someOtherEl = document.getElementById('some-other-el'); 

あなたは予想通り、Syntax Error: Unexpected identifierを取得したいです。

0

これはどちらか本当に厳しい言語の構文エラーはありませんが、それはおそらくコンパイル言語で使用されていない変数に関する警告を与えるだろう

var someEl = document.getElementById('id-of-some-el'); 
var l; 
someOtherEl = document.getElementById('some-other-el'); 

に等しいです。

JavaScriptが突然、どこにでも登場する(つまり5月には、別の変数のタイプミスだった)、それは楽しく、未定義の変数を受け入れるよう、時にはいくつかの興味深いデバッグセッションを与えることができ、非常に寛容です。

+1

'someOtherEl'は' var'修飾子がないので、同じことではありません。 –

+0

ええ、私はそれを提出した直後に気付きました..固定されました –

+0

@Stein: 'l'はそれを持っています... –

-1

あなたが書いたコードは技術的には有効ですが、JSLintはそれを警告として報告します。

問題が1行目の文字56: ';'代わりに 「someOtherEl」を見た。 2行目の文字9時

var someEl = document.getElementById('id-of-some-el'),l

問題:それは定義されて だった前 は 'someOtherEl' が使用されました。

someOtherEl = document.getElementById('some-other-el');

+0

厳密なチェックをしただけです。これらはエラーよりも「警告」に似ています。 –

+0

良い点、悪い意味が私のところにある。それを反映するように答えが更新されました。 – Scottie

+0

:)まだ –