Технически правила исполнения синтаксических конструкций заложены в движке v8 (вообще в любом движке JS), эти правила интерпретируются только подобными движками. Он же парсит, он же интерпретирует, компилирует и исполняет. Мы на выходе не получаем байт код, который исполняется отдельно от движка. Говорить о компиляции тут уместно только в том случае, когда мы получаем байткод наружу, сохраняем его и исполняем в произвольной среде. А не когда там что-то происходит в коробочке, которая включает в себя всё сразу. Мы можем воспользоваться api этой коробочки, если нам дали такую возможность, посмотреть на машинный код, что формируется, даже возможно подать на вход той самой коробке и только ей.