Hoppa till innehåll

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.

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)
  1. true
  2. false
  3. undefined
  4. 10

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.

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)
  1. 10
  2. 20
  3. 30
  4. 40
  5. 50
  6. 60

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.

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)
  1. undefined
  2. 3
  3. 4
  4. 6
  5. 10

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.

let run = function () {
let counter = 0
let result = ''
while (counter < 10) {
result += counter
}
return result
}
let result = run()
console.log(result)
  1. 10
  2. 9
  3. ‘0123456789’
  4. Ingenting — programmet fastnar i en oändlig loop

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'.

let value = 12
let run = function () {
update(value)
return value
}
function update(number) {
number += 10
return number
}
let result = run()
console.log(result)
  1. 10
  2. 12
  3. 22
  4. undefined

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.

CCBY