Przejdź do głównej zawartości

Bug #055

🪲 Znajdź buga

{
foo: {
console.log("first")
break foo
console.log("second")
}

break foo
console.log("third")
}

Czy powyższy kod zadziała poprawnie?

Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

bar: {
foo: {
console.log("first")
break foo
console.log("second")
}

break bar
console.log("third")
}

W przykładzie z błędem, do konsoli zostanie wyrzucony błąd Undefined label 'foo' w 8 linii.

Musimy go naprawić, dodając nazwę etykiety dla bloku nadrzędnego, nazywając go np. bar. Następnie możemy zatrzymać wykonywanie kodu wywołując nazwę zdefiniowanej etykiety, czyli break bar.

Wywołując przerwanie działania kodu poprzez break, możemy odnieść się do etykiety bloku tylko w obrębie bloku, którą dana etykieta definiuje.

Po naprawie tego błędu, w konsoli ujrzymy zalogowane jedynie first.

Logowania do konsoli second i third nie zostaną wykonane, ponieważ działanie kodu w blokach zostaje wcześniej przerwane poprzez break.

Etykiety (label) używa się zazwyczaj do zagnieżdżonych pętli, aby wywołując break lub continue, odwołać się do konkretnej pętli.

Etykietowanie samych bloków {} jest jednak również jak najbardziej poprawne pod względem semantyki języka JavaScript.

🎢 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