検索

ホームページ  >  に質問  >  本文

分析してください | この JavaScript コードの出力が 5 なのはなぜですか?

次のコードですが、1~10を出力すると思ったのですが、出力は5で、ずっと5を出力し続ける無限ループになっています、理解できません、教えてください。ありがとう!

リーリー
大家讲道理大家讲道理2792日前1079

全員に返信(4)返信します

  • 阿神

    阿神2017-05-19 10:42:19

    その i は実際には initloop で宣言されているのと同じです。

    リーリー

    こうやって見てみると、関数の実行処理を考えれば分かるはずです
    ループするたびに、doloopでiが3に変更されます
    doloopが実行された後、i++が実行され、実際のパラメータが渡されます。ループへの入力は It's 4 + 1 である必要があります。
    したがって、コンソールは最初は 1 ですが、その後は無限ループで 5 を出力し続けます。
    必要に応じて 1 ~ 10 を出力したい場合は、doloop の i に var を追加します。ローカル変数にします

    返事
    0
  • 高洛峰

    高洛峰2017-05-19 10:42:19

    最初のループ i=0、doloop の実パラメータ i+1 は 1 であるため、最初の出力は 1 になります。 doloop 関数には i 変数がないため、外部スコープで i 変数が検索され、i=3 によってループ本体の i の値が 3 に割り当てられます。最初のループが終了すると、i<10 であるため、i++ は 4 になります。 2 回目以降、i は 4 になるため、dooloop の実パラメータは 5 になります。dloop 関数が実行されるたびに i には値 3 が割り当てられるため、i は常に 10 未満になります。結果は最初は 1 ですが、その後はループで 5 が出力されます。

    返事
    0
  • 为情所困

    为情所困2017-05-19 10:42:19

    最初にあなたのコードを実行しようとしたところ、ブラウザが 2 回スタックしました...私はブラウザを嘆きました...
    このため、あなたのコードが有害であることがわかりました...

    実際に実行する際の入力は以下の通りです:

    1. 初めての for ループ、i===0, 执行doLoop(1), 因此doLoop函数内部, 形参x===1, 接着又改变了外部i的值, 重置为3, 故此时i===3, 紧接着打印出了x的值, 即1.

    2. 最初のループが終了したため、for ループが 2 回目にループするときi===3, 发生自增操作, 即i++. 故i最终等于4. 4+1=5, 故执行doLoop(5),本次打印出了5. 函数内部重复上一次的操作, 外部i变量再次被重置为3,本次循环结束后i===5.

    3. for ループが最後の操作を 3 回繰り返すと、i が再び 3, 再次打印5, 以此类推, 最终外层的for循环失效, 每次i的值都被重置为3 にリセットされ、ループ終了条件が満たされないため、ブラウザがフリーズします。

    4. 要約すると、この書き方には問題があります。関数内で関数外の変数を変更しないようにしてください。

      返事
      0
  • PHP中文网

    PHP中文网2017-05-19 10:42:19

    ループ内で毎回 i に値 3 が割り当てられ、dloop 関数内の i はプライベート変数ではないため、initloop 内の i に値 3 が割り当てられるたびに、次回 i++ がループされるとき、i は次のようになります。 4 を返し、dloop に渡します。当然、出力されるすべての値は 5 です。それを解いた後、dloop は i を 3 に変更します。i が 10 になることはないので、ループは無限です

    返事
    0
  • キャンセル返事