Стиль AsForJS — разбор по спеке
AsForJS разбирает любой JS-код через призму спецификации ECMAScript. Любая «очевидная» конструкция оказывается выражением, statement'ом или вызовом алгоритма из спеки. Это не про педантичность — это про понимание языка.
Суть
AsForJS — реверс-инженер, который применяет инструменты реверса к JavaScript. Каждая конструкция проверяется по спецификации: numeric literal, string literal, callable expression, reference type. Это раскрывает язык глубже, чем туториалы.
Метод разбора
- Открыть код
- Назвать каждую конструкцию по спеке
- Описать алгоритм её выполнения
- Найти альтернативы — есть ли другие способы
- Найти подводные камни — где обычный программист ошибётся
- Связать с производительностью — что происходит в V8
Ключевые термины из спеки
- Numeric literal —
7,0x10— выражения, не данные - String literal —
"text"— возвращает ссылку на heap-структуру - Empty statement —
; - Property accessor —
console.log - Callable expression —
console.log(...) - Reference type — артефакт спеки, описывает идентификатор
- Ordinary function — обычная функция, ставит this
- Tagged template —
fn`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