// Asynchronously load and execute a script from a specified URL
function loadasync(url) {
var head = document.getElementsByTagName("head")[0]; // Find document <head>
var s = document.createElement("script"); // Create a <script> element
s.src = url; // Set its src attribute
head.appendChild(s); // Insert the <script> into head
}
JavaScript: Определенное руководство представляет такую функцию, которая асинхронно загружает внешние скрипты. Но я не знаю, когда скрипт импортируется. Как только скрипт, который загружает его, заканчивается? Или, после того, как произойдет событие загрузки на окне?
Учитывая назначение функции или причины, почему она вводится, то ответ скорее всего, не первый случай, и следующий тест демонстрирует:Когда выполняется внешний скрипт, импортированный функцией loadasync?
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<script type="text/javascript">
(function loadasync(url) {
var head = document.getElementsByTagName("head")[0];
var s = document.createElement("script");
s.src = url;
head.appendChild(s);
}("external.js"));
</script>
</head>
<body>
<h1>This is a test page.</h1>
</body>
</html>
Содержание в external.js:
alert("external script executed, dead loop");
while(true);
Элемент «h1», как правило, не блокируется мертвой петлей, вызванной внешним скриптом. Это означает, что импортированный внешний скрипт выполняется в более позднее время, а не сразу после запуска скрипта, который загружает его. Но когда именно?
Думаю, вы можете найти свой ответ здесь: https://www.igvita.com/2014/05/20/script-injected-async-scripts-considered-harmful/. Также я считаю, что это зависит от того, как ваш браузер решает его обработать. – Jerska
Внешний скрипт запускается, как только он загружается. Он не ждет 'window.onload' или любого другого события. –
Но загрузка этого скрипта может произойти после 'window.onload', у вас нет гарантии на этот. – Jerska