W JavaScript pętla for ma trzy kluczowe elementy sterujące: inicjalizację (wykonywaną raz przed startem), warunek (sprawdzany przed każdą iteracją) oraz aktualizację (wykonywaną po każdej iteracji). W pokazanym kodzie wzorcowym są to odpowiednio: ustawienie i = 0, warunek i < 100 oraz krok i += 10. Ciało pętli wykonuje zapis: document.write(i + ' '), więc wypisywane są wartości 0, 10, 20, …, 90.
Aby pętla while była funkcjonalnie równoważna, musi odtworzyć dokładnie te same trzy elementy, tylko w innym miejscu kodu:
- Inicjalizacja licznika musi znaleźć się przed pętlą while.
- Warunek w while musi być identyczny jak w for (tu: i < 100).
- Aktualizacja licznika musi znaleźć się w ciele pętli (tu: i += 10), aby każda iteracja przesuwała licznik tak samo.
Odpowiedź "Kod 3." spełnia wszystkie te warunki: ustawia i = 0, ma warunek i < 100 i wykonuje i += 10 po wypisaniu wartości. Dzięki temu liczba iteracji i wypisywane wartości są takie same jak w pętli for.
Pozostałe warianty nie są równoważne, bo łamią co najmniej jeden z warunków równoważności:
- "Kod 1." używa innego warunku zakończenia (i < 10) i nie pokazuje inicjalizacji przed pętlą, więc zakres iteracji jest inny lub zmienna może być niezdefiniowana.
- "Kod 2." nie zawiera aktualizacji licznika w pętli, co grozi pętlą nieskończoną (warunek nie zmienia się w czasie) oraz nie zapewnia tej samej sekwencji wartości.
- "Kod 4." ma inny warunek (i < 10) i inny krok (i++ zamiast i += 10), więc wypisze inne wartości (np. 0–9), a nie 0–90 co 10.
Wskazówka egzaminacyjna: przy pytaniach o równoważność pętli zawsze porównuj inicjalizację, warunek i krok. Jeśli choć jeden element jest inny, kod zwykle nie jest równoważny.