JavaScript часто описывают как некую вариацию «высокоуровневого, однопоточного, со сборкой мусора, интерпретируемого (или своевременно скомпилированного), основанного на прототипах, мультипарадигмального, динамического языка с неблокирующим циклом обработки событий». . Вы можете столкнуться с этими терминами во время собеседования при приеме на работу в JS, но понимание их значения поможет вам лучше понять поведение вашего кода. Давайте раскроем каждый из этих ключевых терминов.

Высокий уровень

Высокоуровневый относится к абстракции, которую язык обеспечивает по отношению к физическому оборудованию машины. JavaScript считается высокоуровневым, поскольку не требует прямого взаимодействия с операционной системой, оборудованием. Кроме того, он не требует управления памятью, как C/C++, поскольку среда выполнения всегда использует сборку мусора.

Интерпретация или своевременная компиляция

Интерпретируемый означает, что исходный код преобразуется в байт-код и выполняется во время выполнения (в отличие от компиляции в двоичный код машинного кода во время сборки). Именно поэтому JS обычно называют «языком сценариев». Первоначально он был только интерпретирован, но современные движки JS, такие как V8, Spidermonkey и Nitro, используют различные методы для выполнения своевременной компиляции или JIT для повышения производительности. Разработчики по-прежнему используют JS как интерпретируемый язык, в то время как движок волшебным образом компилирует части исходного кода в низкоуровневый машинный код за кулисами.

Мультипарадигма

Мультипарадигма означает, что язык является универсальным или гибким. JS можно использовать для декларативного (функционального) или императивного (объектно-ориентированного) стилей программирования.

Динамический слабо типизированный

Динамический чаще всего относится к системе типов. JS — это динамический язык со слабой типизацией, то есть вы не аннотируете переменные типами (string, int и т. д.), а истинные типы неизвестны до времени выполнения.

Прототипное наследование

Прототипное наследование означает, что объекты могут наследовать поведение других объектов. Это отличается от классического наследования, когда вы определяете class план для каждого объекта и создаете его экземпляр. Позже в этом курсе мы углубимся в наследование прототипов.

Модель параллелизма цикла событий

Однопоточный означает, что JS может выполнять только одну инструкцию за раз, даже если ваш ЦП имеет несколько ядер и доступных потоков.

Возникает вопрос… Как JavaScript обрабатывает задания одновременно (т. е. параллельно)?

Цикл событий — это функция, реализованная такими движками, как V8, которая позволяет JS разгружать задачи в отдельные потоки. API-интерфейсы браузера и узла выполняют длительные задачи отдельно от основного потока JS, а затем помещают в очередь функцию callback (которую вы определяете) для запуска в основном потоке после завершения задачи. Вот почему JS называется неблокирующим, потому что он должен ожидать только синхронный код от ваших функций JS. Думайте о цикле событий как об очереди сообщений между одним потоком JS и ОС.

while (queue.waitForMessage()) {
  queue.processNextMessage();
}

Вот как работает JavaScript (JS)!

Надеюсь, вы нашли его информативным.

До скорой встречи с новой статьей!