Недавно я давал несколько интервью, и в основном все интервьюеры задавали подобные вопросы о JavaScript. Поэтому я хочу поделиться своими знаниями с вами через этот блог.

JS однопоточный или многопоточный

Javascript является однопоточным, что означает, что он имеет только один стек вызовов. Стек вызовов совпадает со структурой данных стека, а стеки представляют собой FILO, то есть First In Last Out. Точно так же в стеке вызовов всякий раз, когда строка кода попадает внутрь стека вызовов, она выполняется и перемещается из стека. Таким образом, JavaScript является однопоточным языком из-за только одного стека вызовов.

JS синхронный или асинхронный

Поскольку JavaScript является однопоточным языком, он синхронен по своей природе. Как следует из названия, синхронный означает быть в последовательности, то есть каждый оператор кода выполняется один за другим.
JavaScript является асинхронным только в том смысле, что например, обработка изображений или отправка запросов по сети, таких как вызовы API.

JS передается по значению или передается по ссылке

В JavaScript все аргументы функций всегда передаются по значению. Это означает, что JavaScript копирует значения передаваемых переменных в аргументы внутри функции. Любые изменения, которые вы вносите в аргументы внутри функции, не влияют на передаваемые переменные вне функции.

Но когда вы передаете объект и изменяете его члены, эти изменения сохраняются за пределами функции. Это делает его выглядящим как переданным по ссылке. Но если вы на самом деле измените значение объектной переменной, вы увидите, что изменение не сохраняется, доказывая, что оно действительно передается по значению.

Что такое подъем

Подъем — это механизм JavaScript, в котором объявления переменных и функций перемещаются в верхнюю часть своей области видимости перед выполнением кода. Это означает, что независимо от того, где объявлены функции и переменные, они перемещаются в верхнюю часть своей области видимости независимо от того, является ли их область действия глобальной или локальной.
Но механизм подъема перемещает только объявление. Задания остаются на месте. Чтобы узнать больше об этом, нажмите здесь

Что такое объем

Область видимости — это доступность переменных, функций и объектов в определенной части вашего кода во время выполнения. Другими словами, область видимости определяет видимость переменных и других ресурсов в областях вашего кода.
Существует два типа областей действия.
Глобальная область действия: переменная находится в глобальной область действия, если она определена вне функции.
Локальная область действия: переменные, определенные внутри функции, находятся в локальной области действия.
Чтобы узнать больше об области действия, перейдите по ссылке эта

Что такое закрытие

Замыкание — это комбинация функции и лексического окружения, в котором эта функция была объявлена. Другими словами, Closure — это внутренняя функция, которая имеет доступ к переменным внешней (включающей) функции.
Замыкания используются для расширения поведения внешних функций и полезны при работе с событиями.
Чтобы прочитать об этом подробное замыкание, см. это

Что такое обратный вызов

Обратный вызов — это функция, которая выполняется после выполнения другой функции. Обратные вызовы гарантируют, что функция не будет запущена до завершения задачи, а будет запущена сразу после завершения задачи. Эта задача может быть любым вызовом API или любой задачей, основанной на таймерах.

Асинхронный/ожидание

Async/await — это, по сути, синтаксический сахар поверх промисов. ES5 обрабатывал асинхронные шаблоны с помощью обратных вызовов, ES6 обрабатывал их с помощью промисов, а теперь ES7 предоставляет нам async/await для работы с асинхронными задачами.
Каждая асинхронная функция возвращает промис, и каждый элемент, который вы получаете от await, также является промисом. Кроме того, async/await уменьшает ад обратного вызова, вызванный функциями обратного вызова.

Итак, вот несколько концепций, которые я узнал из разных сайтов и упомянул несколько других выше. Не стесняйтесь делиться своими мыслями ниже. 😊