2016-04-30 13 views
4

私は現在Code AcademyでJavaScriptを学習していますが、whileループセクションの最後にあります。私は単純なJavaScript 'whileループ'を理解していません

次のコードは:

j = 0; 
while (j < 3) { 
    j++; 
} 

は、コンソール上2を生成し、私はなぜ見当もつかない。私はこれをEclipseJaveEEで実行しようとしましたが、このコードをスクリプトとして使用するHTMLファイルを使用すると、私は別の結果を得ることができます。

j3に増やしただけなので、それは意味がありますが、印刷されていません。 CodeAcademyコンソールは私に2

を与える理由はわからないこれは、コンソール出力のスクリーンショットです:

codeacademy console output

+0

これは完全なコードですか?あなたはある時点で2を返しているので、それは現れています。あなたのwhileループには、コンソールに出力するコンソール文はありません。 –

+1

コード – virendrao

+0

のconsole.log()ステートメントは、最後の式の値を返すコンソールです。その行動は非常に難しいので、現時点ではそれを考えないほうが良いです。 – zerkms

答えて

6

それは、ブラウザのコンソールがどのように動作するかだから、あなたが見ている動作です。

評価するコードごとに、値を返そうとします。簡単な表現のために簡単です - 2 + 2はおそらく4を返します。

複数のステートメントで構成されるコードの場合は、はるかに複雑でコンソールはスマートになります。コンソールの動作が標準化されていないという事実は、複雑さを増すものです。したがって、特定のブラウザでこの時点で観察されたことは、別のブラウザや別のブラウザでは保証されません。

はのはしかし何が起こっているかを見つけるためにしてみましょう:このコードブラウザ用

j = 0; 
while (j < 3) { 
    j++; 
} 

をスマートにしようとすると、この場合はj++;ある中で、最新見つかった式の値を出力します。ループ終了前の最後の反復ではjの値だったので、2を返します。後置インクリメントはそれを変更する前に現在の値を返すので、2を返します。

我々は

j = 0; 
while (j < 3) { 
    ++j; 
} 

に変更した場合、出力は非常に同じ理由で、3になります。

j = 0; 
while (j < 3) { 
    j++; 
    a = 42; 
} 

この希望出力42

今度は、何か別のことを試してみましょう。 a = 42はこのコードの最新式です。このサンプルの

j = 0; 
while (j < 3) { 
    j++; 
    var a = 42; 
} 

コンソールは、代入文を無視することを決定し、最新式に戻りますので、再度、2を返します。

要約すると、この動作は標準化されておらず、ブラウザーは期待したものではなくても有用であり何かを出力しようとしています。だから私の助言は暗黙的なコンソール出力に頼ることではなく、結果を得たい場合にはconsole.log()を明示的に使用することです。

+0

コンソールは本当に何も巧妙なことをしようとしていません。これは実行されている 'eval()'の結果を与えるだけです。 –

+0

@squint 'eval()'の結果を返す必要はありません。 Btw、それはブラウザーで対応する実装を見ることが好奇心だろう。 – zerkms

+1

はい、私は彼らが必要とされているわけではありませんでした。私はちょうど巧妙な分析の練習をすることを試みるのではなく、(おそらくとにかく)彼らがやっていることだと言っています。ソースコードは興味深いでしょう。 –

関連する問題