Przejdź do głównej zawartości

Bug #023

🪲 Znajdź buga

function getNumber() {
try {
// Some code that can throw an error
return 1
} catch {
return 2
} finally {
return 3
}
}

console.log(getNumber())

Zakładając, że wewnątrz funkcji wywołujemy kod, który może wyrzucić nam wyjątek, umieszczamy go w wyrażeniu try...catch. Jaka wartość zostanie zwrócona po wywołaniu funkcji? Czy gdyby wyrzucony został wyjątek w bloku try { ... } kod zachowałby się inaczej?

🧪 Rozwiązanie

function getNumber() {
try {
// Some code that can throw an error
//
} catch {
//
} finally {
return 3
}
}

console.log(getNumber())

W przykładzie z błędem zostanie zwrócona wartość 3.

Niezależnie od tego czy wewnątrz bloku try zostanie wyrzucony wyjątek, blok finally wykona się zawsze, w dodatku bezpośrednio przed wyrażeniami przepływu sterowania (return, throw, break, continue) w innych blokach.

Używając return w bloku finally nie ma sensu abyśmy używali return w pozostałych blokach, bo po prostu nie zostanie on wykonany.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js