名前空間はかつて ECMAScript (古い ECMAScript 4) の考慮事項でしたが、取り除かれました。ブレンダン・アイヒがこのメッセージで言っているように:
ES4 での名前空間の使用例の 1 つは、パフォーマンスとプログラマーの理解の両方のために早期バインディング (名前空間組み込みを使用) でした。ランタイムの名前バインディングが以前のバインディングと一致しない可能性はありません。ただし、Web のような動的コード読み込みシナリオでの早期バインディングには、早期バインディングと遅延バインディングの競合を回避するための優先順位付けまたは予約メカニズムが必要です。
さらに、一部の JS 実装者が懸念を持って指摘しているように、複数のオープンな
名前空間は、実装が
大幅に機能しない限り、ランタイム コストを課します。これらの理由から、名前空間と早期バインディング (
この 4 月より前のパッケージなど) は廃止する必要があります。
しかし、そのすべてを理解しているかどうかはわかりません。優先順位付けまたは予約メカニズムとは正確には何ですか? また、それらのいずれかが必要になるのはなぜですか? また、事前バインディングと名前空間は連携する必要がありますか? どういうわけか、関連する問題に頭を悩ませることができません。誰かがより肉付けされた説明を試みることができますか?
また、名前空間がランタイム コストを課すのはなぜですか? 私の考えでは、名前空間とクロージャーを使用する関数の概念にほとんど違いが見られません。たとえば、Yahoo と Google はどちらも YAHOO と google のオブジェクトを持っており、これらのオブジェクトはすべてのパブリック変数とプライベート変数、関数、およびオブジェクトを 1 つのアクセス ポイント内に格納するという点で名前空間のように機能します。では、なぜ名前空間の実装がこれほど大きく異なるのでしょうか? 名前空間とは何かについて、私が誤解しているだけかもしれません。
賞金のために、私は2つのことを知りたいです:
- 名前空間には事前バインディングが必要ですか?
- 名前空間の実装は、プライベート メンバーを持つオブジェクトとどのように異なりますか?