Funktioner i JavaScript
Denne artikel forklarer funktioner i JavaScript.
YouTube Video
Funktioner i JavaScript
Funktioner i JavaScript er blokke af genanvendelig kode, der bruges til at udføre specifikke opgaver. At bruge funktioner forbedrer kodens læsbarhed og gør vedligeholdelse lettere. Funktioner kan defineres på flere måder og fleksibelt manipuleres ved hjælp af argumenter og returværdier.
Måder at Definere Funktioner på
Funktionsdeklaration
Funktioner kan defineres ved hjælp af nøgleordet function
. Funktionsdeklarationer bliver hoisted før koden kører, så de kan kaldes, før de er defineret.
1console.log(greet("Everyone")); // Hello, Everyone
2
3function greet(name) {
4 return "Hello, " + name;
5}
6
7console.log(greet("Alice")); // Hello, Alice
I dette eksempel, fordi greet
-funktionen kaldes før dens deklaration, vises Hello, Everyone
og Hello, Alice
.
Funktionsudtryk
Funktioner kan også defineres ved at tildele dem til en variabel. I dette tilfælde bliver funktionen ikke hoisted og kan kun kaldes, efter at den er defineret.
1const greet = function(name) {
2 return "Hello, " + name;
3};
4
5console.log(greet("Bob")); // Hello, Bob
I dette eksempel vil Hello, Bob
blive vist.
Arrow-funktion
Arrow-funktioner er en måde at definere funktioner med en kortere syntaks på. De er særligt nyttige ved brug af anonyme funktioner (funktioner uden et navn). Arrow-funktioner har også en anderledes opførsel, når det kommer til nøgleordet this
.
1const greet = (name) => {
2 return "Hello, " + name;
3};
4
5// When it can be expressed in a single line,
6// `return` and curly braces can be omitted
7const greetShort = name => "Hello, " + name;
8
9console.log(greet("Charlie")); // Hello, Charlie
10console.log(greetShort("Dave")); // Hello, Dave
Funktioner kan deklareres som greet
og greetShort
i dette eksempel. Hvis funktionen er på én linje, kan du udelade {}
(krøllede parenteser) som i greetShort
.
Elementer af en Funktion
Argumenter
Værdier, der gives til en funktion, kaldes argumenter. Ved at specificere argumenter, når du definerer en funktion, kan du give værdier, når du kalder funktionen.
1function add(a, b) {
2 return a + b;
3}
4
5console.log(add(2, 3)); // 5
Standardargumenter
Du kan angive en standardværdi, hvis der ikke gives nogen værdi til argumenterne.
1function greet(name = "Guest") {
2 return "Hello, " + name;
3}
4
5console.log(greet()); // Hello, Guest
6console.log(greet("Alice")); // Hello, Alice
I dette eksempel, hvis greet()
kaldes, bruges standarden Guest
.
Returneringsværdi
Du kan returnere en returneringsværdi fra en funktion ved hjælp af return
-sætningen. Hvis der ikke er nogen return
-sætning, returnerer funktionen undefined
.
1function greet(name) {
2 console.log('Hello, ' + name + '!');
3}
4function square(num) {
5 return num * num;
6}
7
8console.log(square(4)); // 16
9console.log(greet('Alice')); // undefined
I dette eksempel, da greet
ikke returnerer nogen værdi, er returneringsværdien undefined
.
Anonym funktion
En funktion uden et navn kaldes en anonym funktion. De bruges ofte som funktionsudtryk eller pilfunktioner.
1const double = function(num) {
2 return num * 2;
3};
4
5console.log(double(5)); // 10
Umiddelbart påkaldt funktionsudtryk (IIFE)
Et umiddelbart påkaldt funktionsudtryk (IIFE) er en funktion, der udføres, så snart den defineres. Det bruges normalt til at kontrollere rækkevidde.
1/* Example of IIFE: Immediately Invoked Function Expression */
2(function() {
3 console.log("This is an IIFE");
4})(); // This is an IIFE
Den udføres, så snart den erklæres.
Callback-funktion
At overføre en funktion som et argument til en anden funktion til senere udførelse kaldes en callback-funktion. Det bruges ofte i asynkron behandling og hændelseshåndtering.
1function processData(callback) {
2 let data = "Processed Data";
3 callback(data);
4}
5
6processData(function(result) {
7 console.log(result); // Processed Data
8});
I dette eksempel overføres en funktion, der viser en værdi i konsollen, som en callback-funktion.
Rekursiv funktion
At kalde en funktion sig selv kaldes rekursion, og en funktion, der udfører gentagne processer ved hjælp af dette, kaldes en rekursiv funktion. For eksempel kan en funktion til at beregne en fakultet implementeres ved hjælp af rekursion som følger.
1function factorial(n) {
2 if (n === 0) {
3 return 1;
4 } else {
5 return n * factorial(n - 1);
6 }
7}
8
9console.log(factorial(5));
10// Output : 120
11// (5 * 4 * 3 * 2 * 1 = 120)
I dette eksempel vil fakultetet af 5
, som er 120
, blive vist.
this
-Nøgleord
this
, der bruges inde i en funktion, angiver, hvilken objekt funktionen henviser til. I en almindelig funktion henviser den til det kaldende objekt, men i pilfunktioner bevarer den this
fra det område, hvor den blev defineret.
1const obj = {
2 name: "Alice",
3 greet: function() {
4 console.log(this.name); // Refers to "Alice"
5 }
6};
7
8obj.greet(); // Alice
9
10const obj2 = {
11 name: "Bob",
12 greet: () => {
13 // Arrow function refers to the outer scope (undefined here)
14 console.log(this.name);
15 }
16};
17
18obj2.greet(); // undefined
greet
-metoden for obj
-variablen er erklæret ved hjælp af function
-nøgleordet. Derfor refererer nøgleordet this
til objektet for obj
-variablen. På den anden side er greet
-metoden for obj2
-variablen erklæret ved hjælp af en pilfunktion. Derfor refererer nøgleordet this
til objektet i den ydre scope og er undefined
i dette eksempel.
Funktionens scope og closures
Variabler defineret inden i en funktion kan ikke tilgås uden for funktionen. Dette kaldes funktionens scope. Der er også en funktion kaldet closure, som bevarer scopen på det tidspunkt, hvor funktionen er defineret.
1function outer() {
2 let outerVar = "I am outer!";
3
4 function inner() {
5 console.log(outerVar); // Can access outerVar
6 }
7
8 return inner;
9}
10
11const innerFunc = outer();
12innerFunc(); // I am outer!
I dette eksempel kan inner
-funktionen tilgå outerVar
-variablen, fordi den bevarer scopen, hvor den blev defineret.
Sammendrag
- Der er forskellige måder at definere funktioner på, herunder funktionsdeklarationer, funktionelle udtryk og pilfunktioner.
- Funktioner kan tage argumenter og returnere værdier.
- Der er særlige anvendelser som callback-funktioner og rekursive funktioner.
- Der skal udvises forsigtighed ved håndtering af
this
, da pilfunktioner og almindelige funktioner opfører sig forskelligt. - Closures kan bruges til at få adgang til interne variabler fra uden for scopen.
Funktioner er et af de vigtige begreber i JavaScript, der udnytter dets fleksible struktur.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.