Определение

JavaScript – это синхронный однопоточный язык сценариев, изначально предназначенный для работы на стороне клиента (веб-браузерах). Но в настоящее время мы можем запускать JavaScript и на стороне сервера.

Но подождите, что значит синхронный и однопоточный?

Давайте углубимся в это

Синхронно

В английском языке это просто означает, что что-то происходит одновременно. А с точки зрения языка программирования это просто означает, что код будет выполняться по порядку, строка за строкой.

EG:

console.log("one");
console.log("two");
console.log("three");
/*
The above code will execute in below order
one
two
three
*/

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

EG:

console.log("one");
function magicFunction(){
  console.log("It's magic");
}
setTimeout(magicFunction,5000);
console.log("two");
/*
The above code will output the below result
one
two
undefined
It's magic --> will display this after 5000ms.
*/

Теперь вам будет интересно, что, черт возьми, происходит, вы только что прочитали, что JavaScript — это синхронный язык?

Давайте разберемся в этом глубже, почему и как.

В приведенном выше примере setTimeout будет выполняться асинхронно.

Но что, если я скажу вам, что setTimeout не является частью самого языка JavaScript, а является частью веб-API браузера.

Некоторыми примерами API-интерфейсов браузера являются методы fetch, setInterval, DOM и т. д.

Чтобы сделать JavaScript более мощным на стороне клиента, JS-Engine браузера подключает API браузера к JavaScript, и он будет работать как обычный JavaScript.

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

Хорошо, но что значит однопоточный?

Однопоточный

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

В приведенном выше примере мы видели, что setTimeout работает асинхронно.

Но здесь он не заблокирует основной поток. Он будет выполняться вне стека вызовов.

По истечении времени ожидания функция обратного вызова внутри seTimeout будет ожидать в очереди обратного вызова, пока стек вызовов не станет пустым.

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

И вот… 🤗🤗🤗

Теперь вы знаете, что такое JavaScript.

подпишитесь на меня, чтобы узнать больше о подобных сообщениях в блоге.
Дайте мне знать, был ли этот блог полезен.

Твиттер || Линкедин