私は依存性注入モジュールを作成しました。デフォルトのパラメータで発見したハックを使用します。 function (x = SomeDependency) {}
。 SomeDependencyは定義されていませんが、そのtoStringを解析できます(クラスコンストラクター、矢印関数、および簡潔なオブジェクトメソッドと同じです)。ブラウザではサポートされていません。ノードでのみサポートされます。JavaScriptの引数が遅延評価されていますか?
私の質問:引数が遅延評価されているかどうかに関するドキュメントは見つかりませんでしたが、これに関する仕様書がありますか?または、これは単に定義されていない動作ですか?
更新:
私は何をやっていることは関数を呼び出した後、(上記の例のように)未定義のデフォルトパラメータを使用して、そして彼らが何であるかを見つけるために関数/クラスののtoStringを解析していますか、注入された引数でクラスを新しくする。
「評価済み」はどういう意味ですか?括弧内の実際の式は、@naomikが示すように、関数が呼び出される前に完全に評価されなければなりません。 JSエンジン自体が怠惰な評価をしているのではないかと思うかもしれませんが、関数に引数を使用していないときと使用しないときに違いはありますか?今私は、私はそれに答えることはできません。 –
"関数/クラスのtoStringを手動で解析しています...": – naomik
naomik:あなたは他の選択肢がありますか:P私はすべての耳ですか?私は心から全体に同意します: – user3654410