我正在学习使用闭包库,谷歌提醒我们谨慎使用该库:
这不起作用:
<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>
我知道为什么,因为goog.require会动态添加相关的脚本,并且在脚本还没有下载的时候会立即goog.dom执行,然后会抛出错误。goog.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,但为什么它不抛出错误。
这似乎是由于这两条代码位于两个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执行是异步的。我想念什么吗?