阿罗哈。我一直在编写脚本,虽然我了解问题的每个组成部分的文档(并且查看了关于 SO 的许多其他问题),但我在实践中不了解这种特定行为。请注意,以下代码是隔离特定问题的缩写子集。这里是async.html
:
<!doctype html>
<html><head><script type="text/javascript" src="asyncTest.js" async="true"></script></head>
<body><ul id="menu"><li>one</li><li>two</li><li>three</li></ul></body></html>
这是asyncTest.js
:
var _site = function() {
var load = function() {
var menuCategory = document.getElementById('menu').getElementsByTagName('li');
for(var i=0; i<menuCategory.length; i++) { alert(i+'['+menuCategory[i]+']'); }
};
return { load:load };
}();
window.addEventListener('load',_site.load(),false);
问题是如果没有标签async
中的属性<script>
,这段代码不能正确地将<li>
元素存储到menuCategory
中,就好像它在加载 DOM 之前运行一样(即使我认为它应该在整个window
“对象”加载后触发)。我觉得这很奇怪,因为我addEventListener()
只在整个加载完成后才使用时间”)。如果有的话,我认为相反的情况会导致这种行为。
有人可以解释一下吗,最好使用旧的爱因斯坦“像向六岁的孩子解释一样解释”?我显然在阅读中遗漏了一些东西。谢谢!