Я ищу дополнительную информацию о том, как браузеры выполняют сценарии асинхронного стиля в отношении остальной части страницы.
У меня есть сценарий JS, который следует шаблону асинхронной загрузки следующим образом:
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'http://yourdomain.com/script.js';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
Я понимаю, что это неблокирующая загрузка, и страница будет продолжать загружаться во время этой загрузки. Все идет нормально. Теперь давайте скажем позже, я объявляю некоторую переменную:
var x = "something";
Мой вопрос: будет ли эта переменная доступной для скрипта, который я загружал ранее? Если я сделаю
alert(x);
в скрипте, загруженном выше, это похоже на работу, но я не уверен, что так будет всегда. Также насчет элементов DOM. Если позже на странице есть какой-нибудь div:
<div id="myDiv"></div>
и в моем сценарии я делаю
var div = document.getElementById("myDiv");
Будет ли это работать правильно? В моем тестировании эти вещи, кажется, работают, но я не уверен, было ли намного больше содержимого страницы, которое было бы видно асинхронному сценарию или нет.
Таким образом, мой вопрос может быть в основном сужен до следующего: безопасен ли доступ к элементам из асинхронно загруженного скрипта без проверки какого-либо события, загруженного DOM?