JavaScript-funktionsdefinitioner


Indholdsfortegnelse

    Vis indholdsfortegnelse


JavaScript-funktioner er defineret med funktion søgeord.

Du kan bruge en funktion erklæring eller en funktion udtryk.


Funktionserklæringer

Tidligere i denne vejledning lærte du, at funktioner erklæres med følgende syntaks:

function functionName(parameters) {
  // code to be executed
}

Deklarerede funktioner udføres ikke med det samme. De er "gemt til senere brug", og vil blive udført senere, når de påkaldes (kaldes).

Eksempel

function myFunction(a, b) {
   return a * b;
}

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>

<p>Call a function which performs a calculation and returns the result:</p>

<p id="demo"></p>

<script>
let x = myFunction(4, 3);
document.getElementById("demo").innerHTML = x;

function myFunction(a, b) {
  return a * b;
}
</script>

</body>
</html>

Semikoloner bruges til at adskille eksekverbare JavaScript-sætninger.
Da en funktion erklæring ikke er en eksekverbar sætning, er den det ikke almindeligt at afslutte det med semikolon.


Funktionsudtryk

En JavaScript-funktion kan også defineres ved hjælp af et udtryk.

Et funktionsudtryk kan gemmes i en variabel:

Eksempel

const x = function (a, b) {return a * b};

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>A function can be stored in a variable:</p>
<p id="demo"></p>

<script>
const x = function (a, b) {return a * b};
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>


Efter et funktionsudtryk er blevet gemt i en variabel, kan variablen bruges som en funktion:

Eksempel

const x = function (a, b) {return a * b};
let z = x(4, 3);

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>After a function has been stored in a variable,
the variable can be used as a function:</p>

<p id="demo"></p>

<script>
const x = function (a, b) {return a * b};
document.getElementById("demo").innerHTML = x(4, 3);
</script>

</body>
</html>


Funktionen ovenfor er faktisk en anonym funktion (en funktion uden en navn).

Funktioner gemt i variable behøver ikke funktionsnavne. Det er de altid påkaldes (kaldes) ved hjælp af variabelnavnet.

Funktionen ovenfor slutter med semikolon, fordi den er en del af en eksekverbar sætning.



Funktionen()-konstruktøren

Som du har set i de foregående eksempler, er JavaScript-funktioner defineret med søgeordet funktion.

Funktioner kan også defineres med en indbygget JavaScript-funktionskonstruktør kaldet Function().

Eksempel

const myFunction = new Function("a", "b", "return a * b");

let x = myFunction(4, 3);

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>JavaScript has an built-in function constructor.</p>
<p id="demo"></p>

<script>
const myFunction = new Function("a", "b", "return a * b");
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>

</body>
</html>

Du behøver faktisk ikke bruge funktionskonstruktøren. Eksemplet ovenfor er det samme som at skrive:

Eksempel

const myFunction = function (a, b) {return a * b};

let x = myFunction(4, 3);

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p id="demo"></p>

<script>
const myFunction = function (a, b) {return a * b}
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>

</body>
</html>

Det meste af tiden kan du undgå at bruge det nye søgeord i JavaScript.


Funktion hejsning

Tidligere i denne tutorial lærte du om "hejsning" (JavaScript-hejsning).

Hoisting er JavaScripts standardadfærd med at flytte erklæringer til toppen af nuværende omfang.

Hejsning gælder for variable deklarationer og for funktionsdeklarationer.

På grund af dette kan JavaScript-funktioner kaldes, før de erklæres:

myFunction(5);

function myFunction(y) {
  return y * y;
}

Funktioner defineret ved hjælp af et udtryk løftes ikke.


Selvkaldende funktioner

Funktionsudtryk kan gøres "selvpåkaldende".

Et selvpåkaldende udtryk påkaldes (startes) automatisk uden at blive kaldt.

Funktionsudtryk udføres automatisk, hvis udtrykket følges ved().

Du kan ikke selv påberåbe en funktionserklæring.

Du skal tilføje parentes omkring funktionen for at angive, at det er et funktionsudtryk:

Eksempel

(function () {
  let x = "Hello!!";  // I will invoke myself
})();

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<p>Functions can be invoked automatically without being called:</p>

<p id="demo"></p>

<script>
(function () {
  document.getElementById("demo").innerHTML = "Hello! I called myself";
})();
</script>

</body>
</html>


Ovenstående funktion er faktisk en anonym selvpåkaldende funktion (funktion uden navn).


Funktioner kan bruges som værdier

JavaScript-funktioner kan bruges som værdier:

Eksempel

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3);

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>Functions can be treated as values:</p>
<p>x = myFunction(4,3) or x = 12</p>
<p>In both cases, x becomes a number with the value of 12.</p>
<p id="demo"></p>

<script>
function myFunction(a, b) {
  return a * b;
}
let x = myFunction(4, 3);
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

JavaScript-funktioner kan bruges i udtryk:

Eksempel

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3) * 2;

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>Functions can be used in expressions.</p>
<p id="demo"></p>

<script>
function myFunction(a, b) {
  return a * b;
}
let x = myFunction(4, 3) * 2;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Funktioner er objekter

Operatoren typeof i JavaScript returnerer "funktion" for funktioner.

Men JavaScript-funktioner kan bedst beskrives som objekter.

JavaScript-funktioner har både egenskaber og metoder.

Egenskaben arguments.length returnerer antallet af argumenter, der modtages, når funktionen blev aktiveret:

Eksempel

function myFunction(a, b) {
  return arguments.length;
}

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<p>The arguments.length property returns the number of arguments received by the function:</p>

<p id="demo"></p>

<script>
function myFunction(a, b) {
  return arguments.length;
}
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>

</body>
</html>

Metoden toString() returnerer funktionen som en streng:

Eksempel

function myFunction(a, b) {
  return a * b;
}
let text = myFunction.toString();

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>The toString() Method</h2>

<p>The toString() method returns the function as a string:</p>

<p id="demo"></p>

<script>
function myFunction(a, b) {
  return a * b;
}
document.getElementById("demo").innerHTML = myFunction.toString();
</script>

</body>
</html>

En funktion defineret som egenskaben af et objekt, kaldes en metode til objektet.
En funktion designet til at skabe nye objekter kaldes en objektkonstruktør.


Pile funktioner

Pilefunktioner tillader en kort syntaks til at skrive funktionsudtryk.

Du behøver ikke funktion søgeordet, retur søgeordet og krøllede parenteser.

Eksempel

// ES5
var x = function(x, y) {
    
   return x * y;
}

// ES6
const x = (x, y) => x * y;
 

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrow Functions</h2>

<p>With arrow functions, you don't have to type the function keyword, the return keyword, and the curly brackets.</p>

<p>Arrow functions are not supported in IE11 or earlier.</p>

<p id="demo"></p>

<script>
const x = (x, y) =&gt; x * y;
document.getElementById("demo").innerHTML = x(5, 5);
</script>

</body>
</html>

Pilefunktioner har ikke deres eget dette. De er ikke velegnede til at definere objektmetoder.

Pilefunktioner er ikke hejst. De skal defineres før de bruges.

Brug af const er sikrere end at bruge var, fordi et funktionsudtryk er altid konstant værdi.

Du kan kun udelade nøgleordet retur og de krøllede parenteser, hvis funktionen er en enkelt sætning. På grund af dette kan det være en god vane altid at beholde dem:

Eksempel

const x = (x, y) => { return x * y };
 

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrow Functions</h2>

<p>Arrow functions are not supported in IE11 or earlier.</p>

<p id="demo"></p>

<script>
const x = (x, y) =&gt; { return x * y };
document.getElementById("demo").innerHTML = x(5, 5);
</script>

</body>
</html>

Pilefunktioner understøttes ikke i IE11 eller tidligere.