宣言的なインポート/エクスポートでは、循環依存は問題ありません。 :-)
ソリューションはimport
が変数に値をインポートしていないということですが、それは、変数エクスポート変数へ参照作ることにかかわらず、あなたのケースでは、円は最低限の長さです。可変変数の例はhere、正確な用語はthis questionをご覧ください。
モジュールネームスペースオブジェクトでも同じです。それらのプロパティは、実際にエクスポートされた変数を解決するゲッターだけです。あなたのモジュールがロードされ、評価されたときに
だから、次の手順が発生します。
- ソースを静的モジュールスコープが作成された依存関係グラフ
- を構築するために
export
とimport
宣言のために分析されて
- あなたのモジュールの唯一の依存関係はそれ自体であり、すでに初期化されているので、それを待つ必要はありません。
fooModule
変数が作成され、エクスポートされたモジュールの名前を持つオブジェクト。これは["logFoo"]
であることが知られています。 fooModule.logFoo
プロパティはgetterになり、モジュールスコープの変数logFoo
になります(export {A as B}
を使用した場合、fooModule.B
はA
に解決されますが、両方の名前が同じです)。
- モジュールスコープ内の変数の宣言は、あなたのケース
logFoo
には、変数を作成し、関数宣言が初期化されている(すなわちlogFoo
は機能が割り当てられます)
- モジュールコードが実行される(あなたの場合には、何も起こりません)
logFoo
をインポートするモジュールでfooModule
を呼び出すと、logFoo
を含む名前空間が参照されます。いいえ魔法:-)
あなたは何をしたいですか? – anshuVersatile
インポートは必須ではなく、解決と実行は別です。インポートが最初に解析され、解決されます。コードが実行されるまでに、すべてのバインディングはすでに解決されています。 – Joseph
ベストプラクティスはこれをしないことです –