ブラウザーのDOMおよび他のグローバル変数/プロパティへのシングルスレッドアクセスのみを想定したブラウザーでのJavascriptの実装には、多くの設計上の決定が行われました。これにより、プログラミングで問題が発生する可能性は大幅に低くなりますが、対処しなければならないいくつかの制限が生じます。
言語自体は完全にマルチスレッド化することができ、WebWorkersおよび言語の一部のサーバー実装ですでにそれを確認しています。ただし、複数のスレッドを使用して、複数のスレッド間で共有される変数またはプロパティの読み取り/書き込みを試みる場合は常に、それらの共有リソースへの信頼できるアクセスを可能にするために保護デバイス(ミューテックスなど)を使用する必要があります。これは、このプログラミングを行う方法を大幅に複雑にし、ブラウザでJavascriptを実行するために、そのレベルの理解を必要としないことを決定しました。
マルチスレッドプログラミングを行ったことがある人にとっては強力ですが、見つけるのが難しいバグを導入するのは非常に簡単です。ブラウザのJavascriptの責任者は、そのレベルの難しさと結果として生じるタイプのバグを完全に回避する必要があると判断しました。
現在でもWebWorkersを使用しているため、WebWorkerとメインのjavascriptスレッドの間に共有リソースはありません。2人は、安全を強制するための絶対確実な方法であるメッセージパッシングシステムを介して通信する必要があります。その結果、WebWorkerからDOMにアクセスできなくなります。代わりに、DOMを変更する場合は、単一のメインスレッドにメッセージを投稿し、ITにDOMを更新するように依頼する必要があります。メインスレッドは、他のことを行ったときにのみそのメッセージを受け取ります(シングルスレッドです)。
また、DOMはシングルスレッドアクセス専用に設計された構造として数十億年を費やしている可能性が高いため、複数のスレッドからDOMにアクセスする方法を設計および実装する(そして結果として生じるすべてのバグを修正する)ことは巨大な作業になります。その実装では)。