1

私はクロージャ ライブラリの使い方を学んでいますが、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 の実行は非同期であると聞いたことがあります。私は何かが恋しいですか?

4

1 に答える 1