Nuancer af funktionelle udtryk i JavaScript
Navnet Function Expression er ikke givet uden grund. Det betyder virkelig det - at sådanne funktioner er en del af et eller andet udtryk.
For eksempel kan vi lægge en streng og en funktion uden navn sammen:
let str = 'str' + function() {return 3;};
console.log(str); // vil udskrive 'strfunction() {return 3;}'
Hvorfor ser vi et sådant mærkeligt resultat,
og ikke tallet 3? Fordi det andet led
- ikke er resultatet af funktionens udførelse, men dens kildekode
(vi kaldte jo ikke funktionen, vi skrev den bare).
Det vil sige, at navnet funktionelt udtryk betyder, at en sådan funktion deltager i et eller andet udtryk.
Tildeling til en variabel er også et udtryk:
let func = function() {
console.log('!');
};
Man kan for eksempel også sende funktionen
som en parameter til console.log, og den vil udskrive
dens kildekode til konsollen - det vil også
betragtes som et udtryk:
console.log(function() {return 3;});
Hvorfor det er vigtigt: fordi forskellen mellem Function Declaration og Function Expression slet ikke er, at den første funktion oprettes med et navn, og den anden oprindeligt ikke har noget navn. Det er ikke sandt.
Eksempel. Her har vi en funktion uden navn, men som ikke deltager i noget udtryk (det vil sige, der udføres ingen handlinger med den, simplet sagt):
/*
Denne funktion vil være en Function Declaration,
men med en syntaktisk fejl:
*/
function() {
console.log('!');
}
Sådan kode vil generelt give en fejl! Hvorfor: fordi funktionen ikke deltager i noget udtryk, så betragter browseren den som en Function Declaration, men finder ikke dens navn og giver en fejl.
For at fejlen forsvinder, skal vi gøre funktionen
til en del af et eller andet udtryk. For eksempel,
lad os skrive operationen + foran den:
+function() { // sådan kode er korrekt
console.log('!');
};
Hvordan det virker: selve operationen +
gør intet, det er det samme som at skrive
tallet +3 i stedet for tallet 3 - tilladt,
men ændrer intet.
Men i tilfældet med en funktion - ændrer det. Nu er vores funktion ikke bare skrevet, men den deltager i et udtryk. Derfor vil der ikke være nogen fejl nu. Der vil heller ikke være noget resultat af funktionens udførelse, da vi kun skrev den, men ikke kaldte den.
I stedet for + kan man skrive hvad som helst.
For eksempel:
-function() { // sådan kode er korrekt
console.log('!');
};
!function() { // sådan kode er korrekt
console.log('!');
};
Man kan også sætte vores funktion i runde parenteser, i dette tilfælde vil den også blive et funktionelt udtryk:
(function() { // sådan kode er korrekt
console.log('!');
});
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
function func() {
console.log('!');
}
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
let func = function() {
console.log('!');
}
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
+function() {
console.log('!');
}
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
!function func() {
console.log('!');
}
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
-function func() {
console.log('!');
}
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
1 + function func() {
console.log('!');
}
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
(function func() {
console.log('!');
})
Bestem om den præsenterede funktion er Function Declaration eller Function Expression:
console.log(
function() {
console.log('!');
}
);