Что происходит с JavaScript-кодом внутри V8?
Сначала любая программа подвергается лексическому анализу, который выполняет компонент V8 под названием Scanner. И он разбивает исходный код на поток отдельных токенов в соответствии с лексической грамматикой, описанной в спецификации ECMAScript.
Интересно, что невалидные программы, вроде...
const = = ;
...ещё не выдадут ошибку на данном этапе. Сканер спокойно разобьет нашу программу на токены и отдаст дальше, ведь проверка синтаксической корректности не его зона ответственности. Это зона ответственности Parser, который способен выявить все синтаксические ошибки.
Кстати, одна из ключевых особенностей Parser — генерация Abstract Syntax Tree, которое затем используется для создания байт-кода внутри Ignition. На основе полученных токенов из Scanner генерируется дерево, в котором каждый узел отражает языковую конструкцию: идентификатор, оператор, выражение или функцию.
Например, для кода...
const sum = (a, b) => a + b;
...мы получим следующее дерево:
VariableDeclaration (const)└── VariableDeclarator ├── Identifier: sum └── ArrowFunctionExpression ├── Params │ ├── Identifier: a │ └── Identifier: b └── BinaryExpression (+) ├── Identifier: a └── Identifier: b
Об остальном, что происходит на этапах лексического анализа и синтаксического анализа в V8, читайте в статье «Что происходит с вашим JavaScript-кодом внутри V8. Часть 1».