Utmaningar
Nedan finns ett antal program, försök läsa koden och se vad som kommer att skrivas ut.
Varje fråga har ett antal alternativ att välja bland för att göra det lite lättare att resonera. Klicka på “Visa lösning” för att se svaret och förklaringen.
Om du inte lyckas så kan du alltid prova koden och köra den på egen hand för att se vad som händer, eller ta upp frågan på en handledning.
3.0 Vad kommer att skrivas ut?
Section titled “3.0 Vad kommer att skrivas ut?”Försök läsa koden, följ vad som sker och försök se vad som skrivs ut.
let run = function () { let value = 10 let greaterThan = false
if (value > 10) { greaterThan = true }
return greaterThan}
let result = run()console.log(result)- true
- false
- undefined
- 10
Lösningsförslag
Section titled “Lösningsförslag”Svaret är alternativ 2, false. value > 10 är 10 > 10 vilket är falskt, så if-blocket körs
aldrig och greaterThan behåller sitt initialvärde false.
3.1 Vad kommer att skrivas ut?
Section titled “3.1 Vad kommer att skrivas ut?”let run = function () { let isOK = false let value = 65 let result = 0
if (isOK) { if (value < 0) { result = 10 } else if (value >= 0 && value < 100) { result = 20 } else { result = 30 } } else { if (value < 0) { result = 40 } else if (value < 100) { result = 50 } else { result = 60 } } return result}
let result = run()console.log(result)- 10
- 20
- 30
- 40
- 50
- 60
Lösningsförslag
Section titled “Lösningsförslag”Svaret är alternativ 5, 50. isOK är false så det yttre else-blocket körs. Där är value
65: inte < 0, men < 100 — alltså result = 50.
3.3 Vad kommer att skrivas ut?
Section titled “3.3 Vad kommer att skrivas ut?”let run = function () { let counter = 0 let result = 0 let length = 'hej'.length
do { counter += 1 result = result + counter } while (counter < length)
return result}
let result = run()console.log(result)- undefined
- 3
- 4
- 6
- 10
Lösningsförslag
Section titled “Lösningsförslag”Svaret är alternativ 4, 6. 'hej'.length är 3. do…while körs alltid minst en gång och
fortsätter så länge counter < 3:
| Iteration | counter | result |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 3 |
| 3 | 3 | 6 |
Efter iteration 3 är counter < 3 falskt och loopen avslutas. Funktionen returnerar 6.
3.4 Vad kommer att skrivas ut?
Section titled “3.4 Vad kommer att skrivas ut?”let run = function () { let counter = 0 let result = ''
while (counter < 10) { result += counter }
return result}
let result = run()console.log(result)- 10
- 9
- ‘0123456789’
- Ingenting — programmet fastnar i en oändlig loop
Lösningsförslag
Section titled “Lösningsförslag”Svaret är alternativ 4. counter uppdateras aldrig inuti loopen, så counter < 10 är alltid
sant och programmet fastnar i en oändlig loop.
Lösningen är att öka counter i loopkroppen:
while (counter < 10) { result += counter counter += 1}Med den rättningen returneras '0123456789'.
3.5 Vad kommer att skrivas ut?
Section titled “3.5 Vad kommer att skrivas ut?”let value = 12
let run = function () { update(value) return value}
function update(number) { number += 10 return number}
let result = run()console.log(result)- 10
- 12
- 22
- undefined
Lösningsförslag
Section titled “Lösningsförslag”Svaret är alternativ 2, 12. Talet value är en primitiv datatyp och skickas som en kopia till
update(). Förändringen av parametern number inuti funktionen påverkar inte value i det yttre
scopet.