使用同步和异步脚本标记时的执行顺序是什么?

时间:2016-05-25 05:35:25

标签: javascript html5

告诉我,如果我错了。 JavaScript代码作为单个线程执行。

以下JavaScript代码的执行顺序为A,B和C.

<script src="A"> .... </script>
<script src="B"> .... </script>
<script src="C"> .... </script>

以下代码的执行将取决于代码,并且给予每个脚本的时间意味着首先&#39; A&#39;将开始执行(或“不知道”,执行“A&#39; A&#39;将停止,因为给予它的时间是完整的,而其他人将获得同样的机会说&#39; B&#39; ,而不是&#39; C&#39;而不是&#39; A&#39;再次恢复,循环继续,直到每个脚本的执行完成。

<script async src="A"> .... </script>
<script async src="B"> .... </script>
<script async src="C"> .... </script>

但同时发生同步和异步脚本会发生如下情况。

<script sync src="A"> .... </script>
<script async src="B"> .... </script>
<script sync src="C"> .... </script>
<script sync src="D"> .... </script>
<script async src="E"> .... </script>

2 个答案:

答案 0 :(得分:5)

async属性仅表示脚本将在稍后下载,因此将在稍后的某个时间开始执行 。不会立即下载没有该属性的<script>标记,并阻止页面的其余部分,直到下载和执行完成。

async 意味着一旦脚本运行,它可能会随时中断,另一个脚本可能会开始运行。这是合作的多任务/ CPU调度,绝对不是这里发生的事情。碰巧完成下载的第一个async脚本将一直运行,直到完成为止,此时下一个脚本将开始运行,如果有的话。

所以,是的,使用async你不知道何时你的脚本将开始执行,但是一旦它完成,它就是唯一运行的东西,直到它放弃了这个权力(意思是脚本和/或功能退出)。

答案 1 :(得分:0)

我还没有看到我们可以使用的sync属性。据我所知,我们只能使用属性async

但对于您的查询,您应该使用不带属性,这将自动同步:

<script src="A"> .... </script>
<script async src="B"> .... </script>
<script src="C"> .... </script>
<script src="D"> .... </script>
<script async src="E"> .... </script>

现在回答你的问题,

异步脚本在后台加载,而同步脚本按顺序加载并影响html和css。

因此,我们不能保证像使用同步和异步脚本的脚本顺序一样使用,因为异步脚本在后台加载,可以在其他同步脚本之前或之后加载。