分析してください | この JavaScript コードの出力が 5 なのはなぜですか?
大家讲道理
大家讲道理 2017-05-19 10:40:19
0
4
536

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

リーリー
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(4)
阿神

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

リーリー

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

いいねを押す +0
小葫芦

最初のループ i=0、doloop の実パラメータ i+1 は 1 であるため、最初の出力は 1 になります。 doloop 関数には i 変数がないため、外部スコープで i 変数が検索され、i=3 によってループ本体の i の値が 3 に割り当てられます。最初のループが終了すると、i

いいねを押す +0
为情所困

最初にあなたのコードを実行しようとしたところ、ブラウザが 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
洪涛

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート