Честный ответ для собеседования
Строго «только интерпретатор построчно» — устаревшая картинка. Современный JS компилируется (JIT) движком перед/во время выполнения: парсинг → байткод/IR → оптимизированный машинный код горячих участков (V8, SpiderMonkey, JavaScriptCore).
При этом это не классическая AOT-компиляция в один бинарник «как C» до запуска (хотя есть AOT/байткод-кэш, snapshots, Bun/Node optimizations).
Как формулировать
- Исходник — высокоуровневый скрипт.
- Движок парсит и компилирует на лету (JIT).
- Есть интерпретация байткода + оптимизация hot functions.
- Поэтому JS «и то, и другое»: динамический язык с JIT-компиляцией.
Итог: не говорите «чисто интерпретируемый»; правильнее — «исполняется движком с JIT-компиляцией».