Funktioner är byggstenarna i programmering. De låter oss kapsla in logik, återanvända kod och namnge våra handlingar. Men de kan också vara krångliga att förstå i början - data hoppar in och ut, och variabler lever och dör.
Här är övningar för att stärka din mentala modell av hur funktioner fungerar.
1 - Torrsimulering (Tracing)
När vi anropar en funktion pausar vi “huvudprogrammet”, hoppar in i funktionen, kör koden där, och hoppar sedan tillbaka.
Uppgift: Följ koden rad för rad. Vad är värdet av variablerna efter varje steg?
function magic(x, y) {
let result = x + y;
if (result > 10) {
return result;
}
return 0;
}
let a = 5;
let b = 8;
let c = magic(a, b);
let d = magic(2, 3);
// Vad är värdet på a, b, c och d här?
Facit
aär 5 (Oförändrad)bär 8 (Oförändrad)cär 13 (magic(5, 8) -> 5+8=13. 13 > 10, så vi returnerar 13)där 0 (magic(2, 3) -> 2+3=5. 5 är inte > 10, så vi returnerar 0)
2 - Scope
En funktion utgör ett sk. scope (på svenska ungefär omfång). Ett scope definierar bland annat livslängden för variabler som skapas inom det. Dvs, variabler som skapas inuti en funktion är inte tillgängliga utanför den.
Uppgift: Titta på följande kod. Vad skrivs ut i konsolen?
let secret = "Hemlis";
function reveal() {
let secret = "Överraskning!";
console.log(secret);
}
reveal();
console.log(secret);
- Vad skriver
reveal()ut? - Vad skriver den sista
console.log(secret)ut? - Varför?
Facit
reveal()skriver ut “Överraskning!”.console.log(secret)skriver ut “Hemlis”.- Varför? Variabeln
secretinuti funktionen är en ny, lokal variabel som bara finns inuti funktionen. Den “skuggar” (shadows) den yttre variabeln. Den yttre variabelnsecretpåverkas inte alls.
3 - Funktion eller Värde?
En vanlig fälla är att blanda ihop myFunction och myFunction().
Uppgift: Vad är skillnaden mellan rad A och rad B?
function greet() {
return "Hej!";
}
let a = greet; // Rad A
let b = greet(); // Rad B
Facit
- Rad A:
ablir en referens till själva funktionen.aär nu en funktion och kan anropas:a(). Vi har inte kört koden igreetän. - Rad B:
bfår resultatet av anropet. Koden igreetkörs, returnerar “Hej!”, ochbfår värdet “Hej!”.bär en sträng, inte en funktion.