脚本异步标记是否保留脚本执行顺序?

问题描述:

将组合,缩小,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