在异步加载脚本时确保执行顺序是一个常见需求。以下是几种可靠的方法:
// 第一个脚本
function loadFirstScript(callback) {
var script = document.createElement('script');
script.src = 'first.js';
script.onload = callback;
document.head.appendChild(script);
}
// 第二个脚本
loadFirstScript(function() {
var script = document.createElement('script');
script.src = 'second.js';
document.head.appendChild(script);
});
function loadScript(src) {
return new Promise(function(resolve, reject) {
var script = document.createElement('script');
script.src = src;
script.onload = resolve;
script.onerror = reject;
document.head.appendChild(script);
});
}
loadScript('first.js')
.then(function() {
return loadScript('second.js');
});
async function loadScripts() {
await loadScript('first.js');
await loadScript('second.js');
}
loadScripts();
// 使用RequireJS
require(['first.js'], function() {
require(['second.js']);
});
<script src="first.js" defer></script>
<script src="second.js" defer></script>
注意:defer
会按HTML中的顺序执行,但不如前几种方法灵活。
以上方法都能确保第二个脚本在第一个脚本加载并执行完成后才加载执行。