Путаница в отношении контекста выполнения и подъема JavaScript

Я знаю, что при запуске кода JavaScript есть два этапа: этап создания и этап выполнения.

  1. Фаза создания проходит через все аргументы, которые были переданы в функцию, и создает объект аргумент. Затем код просматривается на предмет объявлений функций и переменных. Для каждой функции и переменной в Переменный объект создается свойство. Каждое свойство «функции» указывает на функцию, и для каждой переменной установлено значение undefined. Цепочка областей видимости и переменная это также создаются и определяются соответственно, но это не входит в мой вопрос.
  2. Фаза выполнения - код запускается построчно.

Это объясняет следующий код:

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 (также известная как объекты) находится в разных файлах, а не в одном файле.

Спасибо за любые объяснения.

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

Pointy 23.10.2018 15:43

Я понимаю это, но разве все сценарии вместе не должны действовать как единый сценарий?

Coelacanth 23.10.2018 15:45

@ Coelacanth нет.

epascarello 23.10.2018 15:46

Вы можете добавить новые <script> в любое время, так как долго нужно ждать перед запуском? навсегда?

Jonas Wilms 23.10.2018 15:47

@trincot согласен с ошибочным голосованием, однако ответы там не так полезны

Jonas Wilms 23.10.2018 15:48

Я видел, что скрипты выполняются, как только они загружаются, я просто искал подробный ответ о том, как это делает движок.

Coelacanth 23.10.2018 15:53

Вы просто ошиблись, когда написали «Я думал, что движок просматривает ВСЕ включенные файлы .js». Больше ничего особенного.

trincot 23.10.2018 16:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
27
0

Другие вопросы по теме