Javascriptは再入可能な言語として定義されています。つまり、ユーザーに公開されるスレッドはなく、実装にスレッドがある可能性があります。setTimeout()
非同期コールバックなどの関数は、実行する前にスクリプトエンジンがスリープするのを待つ必要があります。
つまり、イベントで発生するすべてのことは、次のイベントが処理される前に終了する必要があります。
つまり、非同期イベントが発生したときとコールバックが呼び出されたときの間に値が変化しないことを期待するコードを実行する場合は、ミューテックスが必要になることがあります。
たとえば、1つのボタンをクリックして、コールバックを呼び出すXmlHttpRequestを送信するデータ構造があり、破壊的な方法でデータ構造を変更し、イベントが発生したときに同じデータ構造を直接変更する別のボタンがある場合発生し、コールバックが実行されると、ユーザーはコールバックの前にデータ構造をクリックして更新し、値を失う可能性があります。
このような競合状態を作成することはできますが、各関数はアトミックであるため、コードでそれを防ぐのは非常に簡単です。それは多くの作業であり、実際には競合状態を作成するためにいくつかの奇妙なコーディングパターンを取るでしょう。