脚本异步标记是否保留脚本执行顺序?
问题描述:
将组合,缩小,gzip和缓存放在一边。将脚本标记为异步仍然保留脚本执行顺序吗?脚本异步标记是否保留脚本执行顺序?
说我有一个页面,顶部包含jquery,后面跟着假设存在jquery的底部的其他脚本。
如果我用async属性标记jquery脚本,我知道浏览器会继续解析我的html。然而,浏览器会保证在我的其他脚本执行之前加载jquery,或者可能会发生乱序,导致未定义的$
?
答
使脚本异步不保证任何同步执行,除了脚本本身。
<script async src="jquery.js"></script>
<script>
$.noop() // will definitely throw an error
</script>
<script async src="jquery.js"></script>
<script src="someOtherNonAsyncScript.js"></script>
<script>
$.noop() // may or may not throw an error
</script>
答
不会。它会异步执行。
async和defer属性是布尔属性,指示 脚本应如何执行。 (...)
http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-async