在JavaScript中,脚本保证在文档中的前一个脚本运行完毕后运行

时间:2014-01-30 16:06:14

标签: javascript execution

请考虑以下代码段:

<!DOCTYPE html>
<html>
<head>
    <script src="script_1.js"></script>
    <script src="script_2.js"></script>
</head>
<body>
    <script>
        //script_3
    </script>
</body>
</html>

可以确保script_3仅在script_1script_2完成执行后运行script_2 c仅在script_1完成后运行,前提是script_1script_2中没有异步代码?

因为现在我有一种情况,script_3不时在script_2完成之前开始,并且似乎所有脚本都没有任何异步代码。但我无法在一个更简单的例子中重现这种情况。

谢谢。

1 个答案:

答案 0 :(得分:2)

  

只有在script_1和script_2完成执行并且script_2c仅在script_1完成后运行,并且script_1和script_2中没有异步代码时,是否可以确保script_3运行?

是的,前提是没有脚本标签使用async or defer attributes

请注意,这与此非常不同:

<script src="script1.js"></script>
<script src="script3.js"></script>

... script1.js包含此内容:

var script = document.createElement('script');
script.src = "script2.js";
document.getElementsByTagName('script')[0].parentNode.appendChild(script);

...在这种情况下,script2.jsscript3.js的顺序是混乱的。

但是,如果script1.js使用document.write输出script2.js脚本标记,那就像标记版本一样,订单将得到保证(1,然后是2,然后是3 )。