请考虑以下代码段:
<!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_1
和script_2
完成执行后运行script_2
c仅在script_1
完成后运行,前提是script_1
和script_2
中没有异步代码?
因为现在我有一种情况,script_3
不时在script_2
完成之前开始,并且似乎所有脚本都没有任何异步代码。但我无法在一个更简单的例子中重现这种情况。
谢谢。
答案 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.js
与script3.js
的顺序是混乱的。
但是,如果script1.js
使用document.write
输出script2.js
脚本标记,那就像标记版本一样,订单将得到保证(1,然后是2,然后是3 )。