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

Движок JavaScript V8

Как прямо заявило FreecodeCamp, движок JavaScript выполняет и компилирует JavaScript в собственный машинный код. Каждый крупный браузер разработал свой собственный JS-движок: Google Chrome использует V8, Safari использует JavaScriptCore, а Firefox использует SpiderMonkey. Мы будем особенно работать с V8, поскольку он используется в Node.js и Electron, но другие движки построены таким же образом.

У Freecodecamp есть игровая площадка со списком зеркал V8 на GitHub.

Как разбивается код

Движок JavaScript V8 загружает исходный код, затем код поступает на этап синтаксического анализа, который состоит из анализатора и сканера. Сканер преобразует код в токены, а анализатор создает абстрактное синтаксическое дерево (AST) (показано на снимке экрана ниже).

Поскольку JavaScript является динамически типизированным языком, он использует JIT-компиляцию, сочетающую интерпретацию и компиляцию.

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

Двигатель будет продолжать работать до тех пор, пока код не будет завершен.

В заключение,

Движок JavaScript — это программа, которая преобразует ваш JavaScript в машинный код и выполняет результат на центральном процессоре компьютера (ЦП), написанная Владом Остренко.

Что нового вы узнали? Не стесняйтесь поделиться этим ниже.

Ресурсы и дополнительная информация о двигателе V8/что происходит под капотом:

FreecodeCamp: https://www.freecodecamp.org/news/javascript-under-the-hood-v8/

Блог Инанка: https://dev.to/inancakduvan/let-me-understand-how-javascript-works-under-the-hood-3ibf

Блог Али: https://javascript.plainenglish.io/how-javascript-works-under-the-hood-explained-for-dummies-216ce155183c

Плейлист Под капотом Traversy Media: https://www.youtube.com/playlist?list=PLillGF-Rfqbars4vKNtpcWVDUpVOVTlgB

Блог Мано: https://blog.bitsrc.io/javascript-under-the-hood-632ccae06b27

Разница между машинным кодом и байт-кодом: https://pediaa.com/what-is-the-difference-between-machine-code-and-bytecode/

Блог Дивьеша: https://javascript.plainenglish.io/a-beginners-guide-to-javascript-under-the-hood-bc60fc352163