Nuances van functionele expressies in JavaScript
De naam Function Expression is niet zomaar gekozen. Het betekent echt dat dergelijke functies deel uitmaken van een of andere expressie.
We kunnen bijvoorbeeld een string en een anonieme functie optellen:
let str = 'str' + function() {return 3;};
console.log(str); // geeft 'strfunction() {return 3;}' weer
Waarom zien we zo'n vreemd resultaat,
en niet het getal 3? Omdat de tweede term
niet het resultaat van de functie is, maar haar broncode
(we hebben de functie immers niet aangeroepen, maar gewoon
geschreven).
Dat wil zeggen, de naam functionele expressie geeft aan dat zo'n functie deelneemt aan een of andere expressie.
Toewijzing aan een variabele is ook een expressie:
let func = function() {
console.log('!');
};
We kunnen de functie bijvoorbeeld ook
als parameter doorgeven aan console.log en deze zal
haar broncode in de console weergeven - dit wordt ook
beschouwd als een expressie:
console.log(function() {return 3;});
Waarom dit belangrijk is: omdat het verschil tussen Function Declaration en Function Expression helemaal niet zit in het feit dat de eerste functie met een naam wordt gemaakt, en de tweede aanvankelijk geen naam heeft. Dat is niet zo.
Voorbeeld. Hier is een functie zonder naam, maar ze neemt niet deel aan enige expressie (dat wil zeggen, er worden geen acties met haar ondernomen, om het simpel te zeggen):
/*
Deze functie zal een Function Declaration zijn,
maar met een syntaxfout:
*/
function() {
console.log('!');
}
Zo'n code zal überhaupt een fout geven! Waarom: omdat de functie niet deelneemt aan enige expressie, beschouwt de browser haar als een Function Declaration, maar vindt haar naam niet en geeft een foutmelding.
Om de fout te laten verdwijnen, moeten we de functie
onderdeel laten uitmaken van een of andere expressie. Laten we
er bijvoorbeeld een +-operatie voor schrijven:
+function() { // zo'n code is correct
console.log('!');
};
Hoe dit werkt: de +-operatie op zich
doet niets, het is hetzelfde als het getal
3 te schrijven als +3 - toegestaan,
maar verandert niets.
Maar in het geval van een functie - verandert het wel. Nu is onze functie niet zomaar geschreven, maar neemt ze deel aan een expressie. Daarom is er nu geen fout. Het resultaat van het uitvoeren van de functie is er ook niet, omdat we haar gewoon hebben geschreven, maar niet hebben aangeroepen.
In plaats van + kunnen we van alles schrijven.
Bijvoorbeeld:
-function() { // zo'n code is correct
console.log('!');
};
!function() { // zo'n code is correct
console.log('!');
};
We kunnen de functie ook tussen ronde haakjes zetten, in dat geval wordt ze ook een functionele expressie:
(function() { // zo'n code is correct
console.log('!');
});
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
function func() {
console.log('!');
}
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
let func = function() {
console.log('!');
}
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
+function() {
console.log('!');
}
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
!function func() {
console.log('!');
}
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
-function func() {
console.log('!');
}
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
1 + function func() {
console.log('!');
}
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
(function func() {
console.log('!');
})
Bepaal of de gepresenteerde functie een Function Declaration of een Function Expression is:
console.log(
function() {
console.log('!');
}
);