2012-01-23 14 views
2

誰でもFOR文のコンマ演算子を説明できますか?FORループのコンマ演算子はどのように機能しますか?

function funct_1(c){ 
    for (var a = x, e = y; 0 < c;){ 
     var p = c/2; 
     var c = c/10; // wtf, it is already defined as function argument!! 
    } 
} 

また、「++」のような最後の文が欠落しているようだ、私はこのようなものを見たことがありません。どういう意味ですか?ありがとう!

+1

これはJavaScriptではありません。 –

+0

@amnotiamそれは何ですか?必要に応じて適切にタグを付けることができます。 –

+0

わかりません。カンマはJSでも同じように動作しますが、JSには静的に型付けされた変数はありません。 –

答えて

2

コンマは複数の宣言の区切りを追加するだけです。言い換えれば、あなたのforループは、に等しいを設定し、はyに等しくなります。

インクリメントステートメントの欠如に関しては、それが欠落しているという事実は、forループが明示的に変数をインクリメントしないことを意味します。

+0

ありがとうございます。また、ループ内に 'c'という別の定義があります。 var c = c/10;もしcがすでにコードの前に宣言されているなら、それはどのように可能ですか?それは新しい変数として扱われ、古い定義の後に古いcはループ内で無視されることを意味しますか? – user1015551

+0

@ user1015551本当にありません。新しい変数として 'c'を扱うのではなく、' c/10'の値を 'c'に戻すだけです。つまり、 'c'が' 200'に等しく、 'c = c/10;'と言うと、基本的に 'c = 200/10;'と言います。理にかなっている? –

+0

はい、ありがとうございます。だから、なぜコードは単純に 'c ='の代わりにループ内に 'var c ='を持っていますか?この場合のvarの使用には他の意味がありますか、それとも存在しない可能性がありますか? – user1015551

0

C、C++、およびJavaScript(おそらくC#の)にコンマ演算子は次のように動作します。

comma_operator(statement_1, statement_2) { 
    execute statement_1 
    return statement_2 
} 

だから、あなたのループでは、それはxに設定されている2つの整数値、aeを初期化しますおよびyである。ループがcと比較しているため、増分はありません。おそらくループ内のどこかに設定されています。

+1

ダンノ約CまたはC + +で、カンマoperataorは[this](http://es5.github.com/#x11のように動作します。 14)のjavascriptで。文ではなく、**式**を区切ります。 'var x、y;'と書くことができます。これは 'var x、var y;'と書くことはできません。これはセミコロンで区切られた2つのステートメントです。 – RobG

1

コンマでは、ループの開始時に複数の変数を初期化することができます。欠落しているインクリメント演算子は、最終的に終了条件を満たすスクリプトの中にスクリプトがなければならないことを意味します。そうでなければ、ループは完了しません。

+0

ありがとう!条件がここで定義されていないことを意味しますか?条件がc <0? – user1015551

+0

@ user1015551条件は '0

+0

ありがとう、私はそれを感謝する! – user1015551

関連する問題