Я знаю, что при запуске кода JavaScript есть два этапа: этап создания и этап выполнения.
Это объясняет следующий код:
function foo() {
console.info("foo1");
}
foo();
function foo() {
console.info("foo2");
}
Где вывод в консоли:
foo2
И это имеет смысл, потому что код сначала сканируется, а затем выполняется на втором этапе.
Однако, если бы у меня было три файла .js, объявленных в файле HTML, например:
<html>
<head></head>
<body>
<script src = "script.js"></script>
<script src = "script1.js"></script>
<script src = "script2.js"></script>
</body>
</html>
Где script.js, script1.js и script2.js выглядят так, соответственно
script.js:
function foo() {
console.info("foo1");
}
script1.js:
foo();
script2.js:
function foo() {
console.info("foo2");
}
Вывод в консоли:
foo1
И я ожидал foo2.
Почему разные файлы обрабатываются по-разному? Я думал, что движок просматривает ВСЕ включенные .js файлы, создает объект контекста выполнения, а затем выполняет функции. В принципе, я думал, что нет никакой разницы, если функция JavaScript (также известная как объекты) находится в разных файлах, а не в одном файле.
Спасибо за любые объяснения.
Я понимаю это, но разве все сценарии вместе не должны действовать как единый сценарий?
@ Coelacanth нет.
Вы можете добавить новые <script> в любое время, так как долго нужно ждать перед запуском? навсегда?
@trincot согласен с ошибочным голосованием, однако ответы там не так полезны
Я видел, что скрипты выполняются, как только они загружаются, я просто искал подробный ответ о том, как это делает движок.
Вы просто ошиблись, когда написали «Я думал, что движок просматривает ВСЕ включенные файлы .js». Больше ничего особенного.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Импортированные блоки сценария выполняются сразу после их получения, поэтому второй блок выполняется раньше, чем третий.