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