3

Помогите новичку, почему не перехватывается исключение?

try {
    254 = 'string';
} catch (e) {
    console.log(e);
}
Topik
  • 437
  • 2
    try catch не срабатывает, если код синтаксически неверен. – Doigrales Feb 06 '19 at 12:08
  • 2
    Потому что catch ловит только ошибки выполнения, а 254 = 'string'; это ошибка синтаксиса и код даже не начинает выполняться – andreymal Feb 06 '19 at 12:10
  • @Mike, ответы - в ответы. – Qwertiy Feb 06 '19 at 12:12

2 Answers2

5

Работа любого скрипта в javascript состоит из двух фаз. Первым вступает в дело синтаксический анализатор, который просматривает весь входной текст и подготавливает скрипт к выполнению, переводит его во внутреннее представление. На второй фазе это внутреннее представление начинает выполняться.

Если синтаксический анализатор находит ошибку синтаксиса он немедленно прерывает разбор скрипта, так как не может продолжать разбор и не может построить корректное внутреннее представление.

Конструкция try/catch может перехватывать только ошибки, возникающие на стадии выполнения. В вашем случае ошибка синтаксическая, до выполнения дело не доходит и никакого try в этот момент еще не существует.

Mike
  • 44,087
1

Синтаксическую ошибку можно перегнать в ошибку выполнения и отловить через eval

Например:

try {
    eval('254 = k;');
} catch (e) {
    console.log(e);
}
yolosora
  • 4,217