ポップアップ ボックスが 3 秒後に自動的に非表示になることを実現したいので、次のコードを設定します。
シングルステップデバッグは問題ありません。順次実行されます。ブレークポイントを参照しています。効果は想像どおりです。ただし、ブレークポイントなしで直接実行すると、この効果は発生します。起こらない。 js は実行プロセス中に独自の実行メソッドを持つべきだと思いました。
2. 望ましい効果を達成するための動作メカニズムと実装方法を知りたいです。
リーリー
これは元のポスターからのものです。クリックしてポップアップ フレームを表示すると、3 秒の settimeout 間隔を追加して、ポップアップ フレームを自動的に非表示にするか、ポップアップ フレームの対応する構造を削除します。
ブロッキングメカニズムとは何ですか? Js ブロッキングメカニズムは、Js エンジンのシングルスレッド処理方式に関連しています。いわゆるシングルスレッドとは、特定の時間に特定のコードのみを実行でき、他のコードはブロックされることを意味します。 ブラウザはイベント駆動型であるため、ブラウザ内の多くの動作は非同期 (非同期) であり、イベントが同時にまたは連続的にトリガーされることが簡単です。非同期イベントが発生すると、イベントが作成されて実行キューに配置され、マウス クリック イベント、タイマー トリガー イベント、XMLHttpRequest 完了コールバックなどのイベントがすべて実行されます。実行待ち状態になります。 Js のブロックメカニズムについては、次のコードを参照してください。一般的に、このコードは 0,1,2 をログアウトすると考えられます。
実際、このコードのログ結果は 3,3,3 です。これは、JS の初心者が遭遇しやすい問題です。具体的な理由は、for ループのブロック メカニズムにあります。上記のコードでは、setTimeout タイマーは for ループの実行が完了するまで待機する必要があります。for ループの実行が完了すると、i はすでに 3 になり、この時点で setTimeout の実行が開始されるため、console.log(i) が実行されます。 3になります。 i が 3 である理由については、i が 2 のときにループ条件が満たされ、コード ブロックが実行されます。このとき、i++ は 3 です。条件が満たされず、コード ブロックが実行されない場合、サイクルは停止します。 for ループについては、条件が満たされない場合にループが停止することに注意してください。上記のコードでは、i=3 の場合に条件が満たされていないことがわかります。 イベントブロッキングの解決方法 実はブロッキングとは、「ブロッキング」を解決することを考えるのではなく、「メインスレッド」に実行したいコードを挿入するのが一番良いのです。このままではわかりにくいので、上記のコードを例にして、直接コードにアクセスしてみましょう
タイマーを使ってみませんか
リーリー
これは元のポスターからのものです。クリックしてポップアップ フレームを表示すると、3 秒の settimeout 間隔を追加して、ポップアップ フレームを自動的に非表示にするか、ポップアップ フレームの対応する構造を削除します。
ブロッキングメカニズムとは何ですか?
for(var i=0;i リーリー }Js ブロッキングメカニズムは、Js エンジンのシングルスレッド処理方式に関連しています。いわゆるシングルスレッドとは、特定の時間に特定のコードのみを実行でき、他のコードはブロックされることを意味します。
ブラウザはイベント駆動型であるため、ブラウザ内の多くの動作は非同期 (非同期) であり、イベントが同時にまたは連続的にトリガーされることが簡単です。非同期イベントが発生すると、イベントが作成されて実行キューに配置され、マウス クリック イベント、タイマー トリガー イベント、XMLHttpRequest 完了コールバックなどのイベントがすべて実行されます。実行待ち状態になります。
Js のブロックメカニズムについては、次のコードを参照してください。一般的に、このコードは 0,1,2 をログアウトすると考えられます。
実際、このコードのログ結果は 3,3,3 です。これは、JS の初心者が遭遇しやすい問題です。具体的な理由は、for ループのブロック メカニズムにあります。上記のコードでは、setTimeout タイマーは for ループの実行が完了するまで待機する必要があります。for ループの実行が完了すると、i はすでに 3 になり、この時点で setTimeout の実行が開始されるため、console.log(i) が実行されます。 3になります。
for(var i=0;i リーリー 上記のコードでは、即時実行される匿名関数を追加し、for ループの i を実パラメータとして渡しています。このようにすると、setTimeout は待たずにすぐに実行されます (編集者は詳細を知りませんので、ここでは詳しく説明しません。おそらく、新しい一時スレッドが開かれ、匿名関数がすぐに実行され、そしてその後すぐに元に戻しました)。i が 3 である理由については、i が 2 のときにループ条件が満たされ、コード ブロックが実行されます。このとき、i++ は 3 です。条件が満たされず、コード ブロックが実行されない場合、サイクルは停止します。
for ループについては、条件が満たされない場合にループが停止することに注意してください。上記のコードでは、i=3 の場合に条件が満たされていないことがわかります。
イベントブロッキングの解決方法
実はブロッキングとは、「ブロッキング」を解決することを考えるのではなく、「メインスレッド」に実行したいコードを挿入するのが一番良いのです。このままではわかりにくいので、上記のコードを例にして、直接コードにアクセスしてみましょう
タイマーを使ってみませんか