Хоть я и не знаком c JS, но почитав стать о работе и увидев схему, я выскажу свою гипотезу.
Парсинг кода, построение AST (Abstract Syntax Tree), лексический анализ происходит до интерпретации кода. То есть, в первом варианте syntaxError возникает еще до интерпретации, выполнения самого кода, поэтому кидается ошибка и ничего не выполняется. А второе за синтаксическую ошибку им не считается, поэтому оно спокойно проходит дальше в интерпретатор и выполняется
https://blog.sessionstack.com/how-javascript-works-parsing-abstract-syntax-trees-asts-5-tips-on-how-to-minimize-parse-time-abfcf7e8a0c8 https://blog.bitsrc.io/how-does-javascript-really-work-part-1-7681dd54a36d
Почему эти два примера по разному выдают ошибку?