Стиль AsForJS — разбор по спеке

AsForJS разбирает любой JS-код через призму спецификации ECMAScript. Любая «очевидная» конструкция оказывается выражением, statement'ом или вызовом алгоритма из спеки. Это не про педантичность — это про понимание языка.

Суть

AsForJS — реверс-инженер, который применяет инструменты реверса к JavaScript. Каждая конструкция проверяется по спецификации: numeric literal, string literal, callable expression, reference type. Это раскрывает язык глубже, чем туториалы.

Метод разбора

  1. Открыть код
  2. Назвать каждую конструкцию по спеке
  3. Описать алгоритм её выполнения
  4. Найти альтернативы — есть ли другие способы
  5. Найти подводные камни — где обычный программист ошибётся
  6. Связать с производительностью — что происходит в V8

Ключевые термины из спеки

  • Numeric literal7, 0x10 — выражения, не данные
  • String literal"text" — возвращает ссылку на heap-структуру
  • Empty statement;
  • Property accessorconsole.log
  • Callable expressionconsole.log(...)
  • Reference type — артефакт спеки, описывает идентификатор
  • Ordinary function — обычная функция, ставит this
  • Tagged templatefn`text`

Примеры разборов

console.log("Hello World")

  • console — property accessor к global
  • .log — продолжение property accessor
  • (...) — callable expression
  • "Hello World" — string literal, statement
  • ; — empty statement и разделитель
  • 4 разных конструкции в одной строке

Программа 7

  • 7 — это numeric literal
  • Statement, который при выполнении возвращает 7
  • Не данные — выражение, вызывающее алгоритм спеки
  • Консоль выводит результат последнего выражения

this

  • Не контекст, а особый идентификатор
  • Устанавливается при вызове ordinary function
  • У arrow function не устанавливается вообще
  • f.call(1) — может быть примитивом
  • Метод не «принадлежит» объекту

Reference type

  • Идентификатор не возвращает значение
  • Возвращает структуру reference type
  • GetValue достаёт результат
  • Программисту знать необязательно
  • Знание раскрывает «странное» поведение языка

Принципы разбора

  • Каждая конструкция = вызов алгоритма из спеки
  • В интерпретируемых языках всё — вычисляемые выражения
  • Запоминать имена конструкций ради точного общения
  • Спецификация — единственный авторитет
  • Туториалы лгут или упрощают

Что даёт такой подход

  • Объясняешь любой «странный» пример пошагово
  • Не зависишь от интерпретации блогеров
  • Понимаешь, что AI/туториалы упрощают
  • Различаешь синтаксис и семантику
  • Можешь предсказать поведение в новых ситуациях

Что НЕ нужно

  • Учить всю спецификацию наизусть
  • Цитировать номера секций
  • Поправлять коллег на каждом термине
  • Делать каждое имя из спеки в коде
  • Считать, что без знания спеки ты не программист

Когда применять стиль AsForJS

  • При собесе глубокого уровня
  • При нестандартном баге, который туториалы не объясняют
  • При оптимизации производительности
  • При построении сложных абстракций
  • При обучении junior'ов «как реально работает»

Антипаттерны

  • Игнорировать спеку, верить туториалам и Stack Overflow
  • Считать console.log чистым JS Hello World
  • Думать, что this — это «контекст»
  • Не понимать разницу между statement и expression
  • Использовать ASI «потому что язык расставит точку с запятой»

🎓 Источники

  • 🎓 [Нормальное собеседование Николай и я] · AsForJS · 2025-08-14 · YouTube
    • Тезисы: разбор Hello World по спеке; alert/console это не JS; tagged template; ~17-19 способов вызова функции
  • 🎓 [автор на собеседовании] · AsForJS · 2025-03-02 · YouTube
    • Тезисы: this не контекст; reference type; окружения вместо scope; метод не принадлежит объекту
  • 🎓 [Лучшая из задач для собеседования] · AsForJS · 2025-02-21 · YouTube
    • Тезисы: эволюция задачи от 7; comma-оператор; ASI миф; каждый литерал — вызов алгоритма
  • 🎓 [JavaScript От мифов к спецификации] · AsForJS · 2023-08-23 · YouTube