Если функция, которую вы вызываете, выдает ошибку, ошибка возвращается к ближайшему блоку перехвата, в который включен вызов функции.
try {
throw "an error";
}
catch(e) {
console.log(e); //output: "an error"
}
Теперь рассмотрим это
try {
try {
throw "an error";
}
catch(e) {
console.log(e); //output: "an error"
}
}
catch(e) {
console.log(e); //This line is not going to be executed
}
Этот механизм позволяет прикреплять больше информации об ошибках к сгенерированной ошибке на каждом уровне. Представьте, что ваша ошибка - это объект, и каждый вложенный блок catch присоединяет свою собственную информацию к объекту ошибки и передает его, бросая снова.
Посмотрите на следующий код:
try {
try {
throw {internalError: 101};
}
catch(e) {
//Attach more info and throw again
e.additionalInfo = 'Disconnected when gathering information';
throw e;
}
}
catch(e) {
e.message = 'Cannot get information'
console.log(e); //Final error with lot of information
}