Hvilke værdier viser while-løkken?
For hver iteration af løkken, skriv ned hvilken værdi den viser, og sammenlign derefter med løsningen.
Viser begge løkker de samme værdier, eller ikke?
-
Prefix-formen
++i:let i = 0; while (++i < 5) alert( i ); -
Postfix-formen
i++let i = 0; while (i++ < 5) alert( i );
Denne opgave demonstrerer, hvordan postfix/prefix-former kan føre til forskellige resultater, når de bruges i sammenligninger.
-
Fra 1 til 4
let i = 0; while (++i < 5) alert( i );Den første værdi er
i = 1, fordi++iførst øgeriog derefter returnerer den nye værdi. Så den første sammenligning er1 < 5, ogalertviser1.Derefter følger
2, 3, 4…– værdierne vises én efter én. Sammenligningen bruger altid den inkrementerede værdi, fordi++er før variablen.Til sidste følger
i = 4, som bliver forøget til5, sammenligningenwhile(5 < 5)fejler, og løkken stopper. Så5vises ikke. -
Fra 1 til 5
let i = 0; while (i++ < 5) alert( i );Den første værdi er igen
i = 1. Postfix-formen afi++øgeriog returnerer derefter den gamle værdi, så sammenligningeni++ < 5vil brugei = 0(modsat++i < 5).Men
alert-kaldet er separat. Det er en anden sætning, som udføres efter inkrementeringen og sammenligningen. Så den får den aktuellei = 1.Derefter følger
2, 3, 4…Lad os stoppe ved
i = 4. Prefix-formen++iville øge den og bruge5i sammenligningen. Men her har vi postfix-formeni++. Så den øgeritil5, men returnerer den gamle værdi. Derfor er sammenligningen faktiskwhile(4 < 5)– sand, og kontrollen går videre tilalert.Værdien
i = 5er den sidste, fordi næste trinwhile(5 < 5)er falsk.