2017-10-12 18 views
0

この投稿は、この記事の簡易版のようなものです:JavaScript 'for'ループの実行順序は?

What is the exact order of execution of Javascript's for loop?

私はforループでの作業中に混乱して得続ける理由でスーパー興味があります。私はどのようにforループがフードの下で実行されるのかを知りたい。だから、

for (let i = 0; i < 10; i++) { 
    alert(i); 
}; 

私の理解から、これは私の知る限り、このような何かが実行される順序を理解する上で取得するようです:

1)エンジンがi = 0

2を初期化)エンジンをチェックi < 10

3)というエンジンは、文

のために保持する括弧の飛び出し4)エンジンは、エンジンがi

6をインクリメントするバック括弧にポップ)この反復

5ためにループ内のコードを実行する)ステップ2.

から繰り返し私は私は推測ほとんどのステップ#3について混乱しています。ブロック内のコードを実行するためにエンジンが実際に 'for'ループから飛び出しますか?

私の理解から、JavaScriptはシングルスレッドであり、同期的にしか動かすことができないので、 'for'ステートメントの途中でエンジンが 'for' .... 'for'ループの3つの条件のそれぞれは、それらの独自の独立したコマンドであり、ブロック内のコマンドに移る前に実行して終了することができます。

私はこの質問を正しく聞いているかどうかはまだ分かりませんが、私はまだ比較的プログラミングに新しいです、私はこの時点でバニラJSを知っています...来月はノードに入る時です)

はそれを考え出した:私は順序は次のように行くことを学びました Click for an image of my breakpoint placement

: 1)var i0

2)var iに初期化されtruthyのためにチェックされています実行が終了すると、iをインクリメント

5)一つインクリメントする

4)真、コードが実行される場合

3)、iはtruthy

6)繰り返しは3ステップのためにチェックされます - 5までiは偽です

7)反復が終了しました。

ありがとうございました。 Chromeデバッガは、私が思ったよりもはるかに強力です!

+0

括弧の外にある_pops以外_次の行にむしろ_あなたの質問は何ですか? – Lixus

+1

「ポップアウト」とは何を意味するのかわかりません。かっこは、コードの構文上の構造化にのみ関連し、実際に実行されるものとは関係ありません。 "* forループの3つの条件のそれぞれは、それら自身の独立したコマンドであり、実行することができます*"は正確にポイントです。 – Bergi

+0

この場合、 'i'のスコープは中括弧ブロックの内側にあります。ところで、古い 'var'キーワードを使用する場合、' for'ループの周りに関数がない場合、 'i'は周囲の関数またはウィンドウのスコープにあります –

答えて

0

(コメントでこれを置くために申し訳ありませんが十分ではない担当者)

私は、ブラウザのデバッグ機能を使用することをお勧めします。私はどのブラウザを使っているのか分かりませんが、 "XブラウザでJSをデバッグする"というGoogleだけで、そこには多くのチュートリアルがあります。

まず、簡単なループ用のhtmファイルを作成します。ブラウザを開き、デバッガを初期化します。その後、ブラウザでファイルを開きます。 "Sources"部分を開くとコードが表示されます。 forループで行をクリックしてブレークポイントを設定し、変数(iのような)にもウォッチを作成します。

その後、htmファイルをリロードすると、デバッガはブレークポイントで停止します。その後、forループを段階的に "ステップイン"します。システムがコードをどのように動いているか見ることができ、各ステップを見て、変数が変化するのを見ることができます。うまくいけば、これはどのように動作しているかについてのいくつかの洞察を与えるでしょう。

これは複雑なコードを理解し、エラーを簡単にデバッグするのに最適な方法です。

+0

これ!これはまさに私が必要としていたものです。私はforループのすべてのステップでブレークポイントを持っています。私は最初に、カウンター変数が初期化されていることを学びました。そして、それは基本的に真理のチェック、コードの実行、インクリメント、真実のチェック、コードの実行、インクリメントなどの三角形に変わります。 – matthewvolk

+0

@matthewvolkよく私は私が助けることができてうれしいです。特に、複数のIF節を持つforステートメントのネストでは非常に便利です。それは各ステップで停止し、何が起きているのかを見るのに役立ちます.. – esion