Я не о том. Понятно что вставленный парсером скрипт исполняется тут же, а парсер ждет. Я о том, что внешний скрипт, вставленный во время парсинга юзером (через appendChild) будет исполнен асинхронно. Если не ошибаюсь, все внешние скрипты (то есть имеющие [src]), вставленные через appendChild, помечаются как асинхронные.
Но я вновь ошибся. Если вставлять скрипт даже синхронно, через document.write, то конечно же он исполнится только когда текущий скрипт отработает. Я просто запутался. Есть еще вариант вставки через appendChild инлайн-скрипта. Так вот он отработает незамедлительно, прям в момент вставки.
Вставка через appendChild, не сработает, так как это внешний скрипт, вставленный юзером (отрабатывает всегда асинхронно).
<script>
var script = document.createElement('script');
script.src = 'data:application/javascript,function%09fn(){alert("ok")}';
document.head.appendChild(script);
</script>
<script>
fn();
</script>
Вставка через document.write, сработает, так как скрипт будет разобран парсером сразу же и отправлен на выполнение.
<script>
var script = document.createElement('script');
script.src = 'data:application/javascript,function%09fn(){alert("ok")}';
document.write('<script src=\'data:application/javascript,function%09fn(){alert("ok")}\'><\/script>');
</script>
<script>
fn();
</script>
Сработает, чем-то похоже на eval.
<script>
var script = document.createElement('script');
script.innerText = 'function fn() {alert("ok")}';
document.head.appendChild(script);
fn();
</script>