Узнайте, как try-catch-finally будет выполняться в JavaScript

try-catch-finally используется для обработки ошибок времени выполнения и предотвращения их остановки выполнения программы.



Все, что вам нужно знать об обработке ошибок в Javascript
Узнайте, как обрабатывать исключения в Javascript. levelup.gitconnected.com



1. Оператор возврата внутри блока try или catch

Если у нас есть блок finally, оператор return внутри блока try и catch не выполняется. Он всегда будет попадать в блок finally.

function test() {
try {
return 10;
} finally {
console.log("finally");
return 1;
   }
}
console.log( test() ); // finally 1

Пример 2:

function test() {
try {     
    return 10;
    throw "error"; // this is not executed, control goes to finally
  } catch {
    console.log("catch"); 
    return 1;
  } finally { 
    console.log("finally");
    return 1000;
  }
}
console.log( test() ); // finally 1000

2. Переменные, объявленные внутри блока try, недоступны в блоке catch или finally.

Если мы используем let или const для объявления переменной в блоке try, она не будет доступна для catch или finally. Это потому, что эти объявления переменных имеют блочную область видимости.

try {
   
    let a = 10;
    throw "a is block scoped ";
} catch(e) {
    
    console.log("Reached catch");
    console.log(a); // Reference a is no defined
}

Но если мы используем var вместо let или const, тогда он будет доступен внутри catch, потому что var является областью действия функции, и объявление будет поднято.

try {
   
    var a = 10;
    throw "a is function scoped ";
} catch(e) {
    
    console.log("Reached catch");
    console.log(a); // 10
}

3. Поймать без сведений об ошибке

В ES2019 аргумент для блока catch необязателен.

try {
   // code with bug;
} catch {
   // catch without exception argument
}

4. попробуй… улов не получится на setTimeOut

Если исключение происходит в «запланированном» коде, например setTimeout, try..catch его не поймает.

function callback() {
    // error code
}
function test() {
   try {
      setTimeout( callback , 1000);
   } catch (e) {
      console.log( "not executed" );
   }
}

Чтобы справиться с этим, нам нужно добавить try…catch в обратный вызов setTimeOut:

function callback() {
   try {
     // error code 
   }catch
     console.log("Error caught") ;
   }
}
function test() {
      setTimeout(callback, 1000);
}

5. Добавление глобального обработчика ошибок.

Мы можем зарегистрировать window.onerror прослушиватель событий, который будет запускаться в случае неперехваченной ошибки. Это не обработает ошибку, а обнаружит ее - вам нужно будет указать свой собственный try…catch внутри нее.

window.onerror = function(e) {
   console.log("error handled", e);
}
function funcWithError() {
    a; // a is not defined
}
function test() {
    funcWithError();
    console.log("hi"); // this will not be executed
}
test(); 

Подпишитесь на Javascript Jeep🚙💨.