Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Исключения (throw,try,catch,finally) (https://javascript.ru/forum/misc/7326-isklyucheniya-throw-try-catch-finally.html)

Niar 27.01.2010 18:56

Эээ у Дэвида написано что один из вариантов использования finally если try был закончен из-за инструкции break, continue или return. Если break можно еще использовать с меткой то как c continue и return там же SyntaxError

e1f 27.01.2010 19:00

Мараторий, еще можно так:
try { eval.call(document, '1') } catch ( ex ) { console.info(ex) }

Практически -- не знаю, разве что действительно отлавливать некорректное использование eval.
Здесь Есть дискуссия на подобную тему, вроде бы.

Niar 27.01.2010 19:06

Есть еще места где можно почитать об этом на русском?

e1f 27.01.2010 19:08

гугл ;)

Niar 27.01.2010 19:09

Я ему не верю)
Он один раз привёл меня на сайт где можно 1 000 000$ заработать и нифига. Обманул:nono:

Niar 27.01.2010 19:11

А можно я вас приведу пару примеров и вы мне расскажите правильно я понял алгоритм работы кода?

e1f 27.01.2010 19:13

Цитата:

Сообщение от Niar (Сообщение 42394)
Я ему не верю)
Он один раз привёл меня на сайт где можно 1 000 000$ заработать и нифига. Обманул:nono:

Фу, как не стыдно обвинять гугл в собственной некомпетентности :)
Цитата:

Сообщение от Niar (Сообщение 42395)
А можно я вас приведу пару примеров и вы мне расскажите правильно я понял алгоритм работы кода?

Давайте, попробуем.

Niar 27.01.2010 19:20

try {
throw new Error(404)
 }
finally {
alert("Пыщь-пыщь")
}
try{
throw new Error(405)
}
catch(e){
alert(e.message)
}

Тут сначала исполняется finally. Так как catch нету он ищет его дальше. Однако catch принадлежит другому try и в результате ошибка.
try{
throw new Error(405)
try {
throw new Error(404)
 }
finally {
alert("Пыщь-пыщь")
}
}
catch(e){
alert(e.message)
}

Тут сразу находит 405 ошибку и в результате остальной код try не исполняется и ищется catch, и находится.
try{
try {
throw new Error(404)
 }
finally {
alert("Пыщь-пыщь")
}
}
catch(e){
alert(e.message)
}

Тут сразу находит 404 ошибку и ищется catch. Но он находит только finally и исполняет его. Потом ищет catch на внешнем уровне и находит.

try {
throw new Error(404)
 }
finally {
alert("Пыщь-пыщь")
throw new Error(406)
}

А тут finally заменяет старое исключение на новое

Мараторий 27.01.2010 19:25

Да, вроде все верно.

Однако последний пример не тривиален для понимания.

Niar 27.01.2010 19:27

Не понятно только как try может быть завершён continue и return


Часовой пояс GMT +3, время: 14:24.