Here据说,html文档有 4 readyState 可能的值:
未初始化 - 尚未开始加载尚未加载 - 正在加载
交互式 - 已经足够加载,用户可以与之交互 完成 - 满载
Here据说基本上,defer告诉浏览器在执行该脚本块中的javascript之前等待“直到它准备就绪”。通常这是在DOM完成加载和document.readyState == 4
所以问题是先执行什么以及为什么 - <script defer src="...">
或window.onload=function(){...} ?
答案 0 :(得分:14)
继续阅读http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#attr-script-defer:
使用这些可以选择三种可能的模式 属性。如果存在
async
属性,那么脚本将是 一旦可用就异步执行。 如果async
属性不存在但defer
属性存在,然后是 页面完成解析后执行脚本。如果两者都没有 属性存在,然后获取并执行脚本 在用户代理继续解析页面之前立即执行。
http://www.w3.org/TR/html5/syntax.html#the-end告诉您延迟脚本首先运行:
...
执行脚本列表中的第一个脚本,该脚本将在文档完成解析后执行 ...
然后是DOMContentLoaded
事件:
将任务排队以在Document上触发名为DOMContentLoaded的气泡的简单事件。
load
事件在这两件事之后总会发生。