我正在学习使用闭包库,谷歌提醒我们谨慎使用该库:
这不起作用:
<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.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
,但为什么它不抛出错误。
这似乎是由于这两条代码位于两个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执行是异步的。我想念什么吗?