私はクロージャ ライブラリの使い方を学んでいますが、Google はライブラリを慎重に使用するように注意しています。
これは動作しません:
<script src="closure-library/closure/goog/base.js"></script>
<script>
// DON'T DO THIS.
goog.require('goog.dom');
var newHeader = goog.dom.createDom('h1');
</script>
なぜなら、beacuseは動的にgoog.require関連するスクリプトを追加し、スクリプトがまだダウンロードされていない間にすぐに実行され、エラーがスローされるからです。goog.domgoog.dom.xxgoog.dom
しかし、なぜこれが機能するのだろうか:
<script src="closure-library/closure/goog/base.js"></script>
<script>
goog.require('goog.dom');
</script>
<script>
var newHeader = goog.dom.createDom('h1');
</script>
はのgoog.dom直後に呼び出されますgoog.requireが、なぜエラーがスローされないのですか。
これは、2 つのコードが 2 つのscriptブロックに存在することが原因であると思われます。
scriptだから、誰かが別のブロックと別の場所(頭または体の内側)でJavaScriptの実行メカニズムを説明できるのだろうか?
Romainの回答の更新:
パーサーはこれを見ます:
<script src="closure-library/closure/goog/base.js"></script> <script> goog.require('goog.dom'); </script> <script src="closure-library/closure/goog/dom.js"></script> <script> var newHeader = goog.dom.createDom('h1'); </script>
の前に<script src="closure-library/closure/goog/dom.js"></script>が追加されていますがvar newHeader = goog.dom.createDom....、dom.jsをダウンロードするgoog.dom.create....予定ですが、 のdom.jsダウンロードと実行が完了してから を実行しますか? しかし、js の実行は非同期であると聞いたことがあります。私は何かが恋しいですか?