次のコードですが、1~10を出力すると思ったのですが、出力は5で、ずっと5を出力し続ける無限ループになっています、理解できません、教えてください。ありがとう!
光阴似箭催人老,日月如移越少年。
その i は実際には initloop で宣言されているのと同じです。
こうやって見てみると、関数の実行処理を考えれば分かるはずです ループするたびに、doloopでiが3に変更されます doloopが実行された後、i++が実行され、実際のパラメータが渡されます。ループへの入力は It's 4 + 1 である必要があります。したがって、コンソールは最初は 1 ですが、その後は無限ループで 5 を出力し続けます。 必要に応じて 1 ~ 10 を出力したい場合は、doloop の i に var を追加します。ローカル変数にします
最初のループ i=0、doloop の実パラメータ i+1 は 1 であるため、最初の出力は 1 になります。 doloop 関数には i 変数がないため、外部スコープで i 変数が検索され、i=3 によってループ本体の i の値が 3 に割り当てられます。最初のループが終了すると、i
最初にあなたのコードを実行しようとしたところ、ブラウザが 2 回スタックしました...私はブラウザを嘆きました...このため、あなたのコードが有害であることがわかりました...
実際に実行する際の入力は以下の通りです:
初めての for ループ、i===0, 执行doLoop(1), 因此doLoop函数内部, 形参x===1, 接着又改变了外部i的值, 重置为3, 故此时i===3, 紧接着打印出了x的值, 即1.
i===0
doLoop(1)
doLoop
x===1
3
i===3
1
最初のループが終了したため、for ループが 2 回目にループするときi===3, 发生自增操作, 即i++. 故i最终等于4. 4+1=5, 故执行doLoop(5),本次打印出了5. 函数内部重复上一次的操作, 外部i变量再次被重置为3,本次循环结束后i===5.
i++
4
4+1=5
doLoop(5)
5
i===5
for ループが最後の操作を 3 回繰り返すと、i が再び 3, 再次打印5, 以此类推, 最终外层的for循环失效, 每次i的值都被重置为3 にリセットされ、ループ終了条件が満たされないため、ブラウザがフリーズします。
ループ内で毎回 i に値 3 が割り当てられ、dloop 関数内の i はプライベート変数ではないため、initloop 内の i に値 3 が割り当てられるたびに、次回 i++ がループされるとき、i は次のようになります。 4 を返し、dloop に渡します。当然、出力されるすべての値は 5 です。それを解いた後、dloop は i を 3 に変更します。i が 10 になることはないので、ループは無限です
その i は実際には initloop で宣言されているのと同じです。
リーリーこうやって見てみると、関数の実行処理を考えれば分かるはずです
ループするたびに、doloopでiが3に変更されます
doloopが実行された後、i++が実行され、実際のパラメータが渡されます。ループへの入力は It's 4 + 1 である必要があります。
したがって、コンソールは最初は 1 ですが、その後は無限ループで 5 を出力し続けます。
必要に応じて 1 ~ 10 を出力したい場合は、doloop の i に var を追加します。ローカル変数にします
最初のループ i=0、doloop の実パラメータ i+1 は 1 であるため、最初の出力は 1 になります。 doloop 関数には i 変数がないため、外部スコープで i 変数が検索され、i=3 によってループ本体の i の値が 3 に割り当てられます。最初のループが終了すると、i
最初にあなたのコードを実行しようとしたところ、ブラウザが 2 回スタックしました...私はブラウザを嘆きました...
このため、あなたのコードが有害であることがわかりました...
実際に実行する際の入力は以下の通りです:
初めての for ループ、
i===0
, 执行doLoop(1)
, 因此doLoop
函数内部, 形参x===1
, 接着又改变了外部i的值, 重置为3
, 故此时i===3
, 紧接着打印出了x的值, 即1
.最初のループが終了したため、for ループが 2 回目にループするとき
i===3
, 发生自增操作, 即i++
. 故i最终等于4
.4+1=5
, 故执行doLoop(5)
,本次打印出了5
. 函数内部重复上一次的操作, 外部i变量再次被重置为3
,本次循环结束后i===5
.for ループが最後の操作を 3 回繰り返すと、i が再び
3
, 再次打印5
, 以此类推, 最终外层的for循环失效, 每次i的值都被重置为3
にリセットされ、ループ終了条件が満たされないため、ブラウザがフリーズします。ループ内で毎回 i に値 3 が割り当てられ、dloop 関数内の i はプライベート変数ではないため、initloop 内の i に値 3 が割り当てられるたびに、次回 i++ がループされるとき、i は次のようになります。 4 を返し、dloop に渡します。当然、出力されるすべての値は 5 です。それを解いた後、dloop は i を 3 に変更します。i が 10 になることはないので、ループは無限です