Javascript - единственный язык, который занял первое место как в самом любимом, так и в самом ненавистном языке по результатам опроса StackOverflow. Какой-то странный синтаксис, десятки разных версий и сотни фреймворков. Вероятно, самый используемый, возможно, самый популярный язык в 2020 году.

Если вы веб-разработчик и пытаетесь что-то сделать с веб-приложениями, вы уже очень хорошо это знаете.

В предложении:

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

Что такое Javascript:

Javascript - это язык программирования, основанный на ECMA 262. Чтобы понять, как он работает, нам нужно углубиться в низкий уровень, глубоко! Значит, уровень ЦП.

Javascript запускается в браузере или на стороне сервера, он выделяет оперативную память для времени выполнения, чтобы сохранять переменные и объекты, которые упоминаются в коде. Ему также требуется шаг со стороны ЦП для выполнения логики в коде.

Но как разработчику вам действительно не нужно слишком много думать об этом, если в вашем коде не возникнет серьезная ошибка производительности. Потому что Javascript - это язык высокого уровня, что означает, что он предоставляет уровни абстракции, чтобы подсластить процесс разработки.

Чтобы прояснить ситуацию, вы должны понять две ключевые концепции современного программирования:

Переводчик:

это программа, которая выполняет инструкции, написанные на языке высокого уровня.

Компилятор:

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

Вы можете прочитать эту замечательную статью, чтобы понять разницу между ними



Javascript - это интерпретируемый язык,

Это означает, что ему требуется интерпретируемое программное обеспечение для чтения и выполнения кода построчно, что также делает Javascript однопоточным языком программирования.

Javascript также является динамическим слабо типизированным языком,

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

//Javascript variable declaration
let word = "Hello World"
console.log(word)
//Java variable declaration
String word = "Hello World";
System.out.println(word);

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

Для строго типизированного javascript вы можете использовать Typescript. Это предварительно скомпилированный язык.

Javascript - это многопарадигмальный язык,

С его помощью вы можете разработать объектно-ориентированный или функциональный подход. Еще одна загвоздка в том, что javascript - это прототипное наследование

Это означает, что все в Javascript является объектом, каждый объект содержит ссылку на другой объект, который может наследовать поведение и значение. Такое поведение делает javascript действительно гибким и в то же время простым для манипулирования языком.

Эта статья не будет завершена без упоминания ECMA.
Emca-262 (800-страничный документ) упомянул все детали того, как должен располагаться javascript, но не указал, как должен работать интерпретатор, как должно работать управление памятью.

Те, которые должны реализовать производители браузеров. На текущем рынке два наиболее часто используемых браузерных движка Паук-обезьяна от Mozilla и « V8 » от Google. Оба они делают что-то, называемое JIT (своевременная компиляция). Которые ничего не меняют в коде, но интерпретируют и оптимизируют, чтобы браузер / компьютер мог их понять.

Стек вызовов:

Это структура данных стека, которая поддерживает принцип LIFO (last-in-first-out).

Давайте проясним концепцию,

function add(a, b) {
     return a + b; 
}  
function average(a, b) {
     return add(a, b) / 2;
 }  
let x = average(10, 20);

Когда вы запускаете приведенный выше код, JS-движок создает стек и помещает функцию main() , после этого он помещает функцию average() и, наконец, складывает add() и выполнить в последовательности add () = ›average () =› main ()

Каждый браузер имеет определенный размер стека вызовов, когда размер стека заполняется, он называется StackOverflow.

КУЧА:

Куча - это неорганизованный пул памяти, в котором хранятся все объекты и значения.
Особенностью кучи является модель сборки мусора. В куче V8 автоматически отбрасываются переменные, которые больше не нужны программам.

Теперь упускается один ключевой момент: как JS справляется с любой длительной задачей. Ответ - Event-Loop.

Цикл событий:

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

Event-Loop включает асинхронное поведение js, помещая асинхронную функцию в последнюю очередь перед main. Вот последовательность событий цикла.

  1. Запустить блок кода синхронизации
  2. Выполнить обещание и микрозадачу
  3. Запустить блок асинхронного кода

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

Если вам нужны ссылки, не стесняйтесь спрашивать.