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