Nuanses van funksionele uitdrukkings in JavaScript
Die naam Function Expression is nie sonder rede gegee nie. Dit beteken werklik dat sulke funksies 'n deel is van 'n uitdrukking.
Byvoorbeeld, ons kan 'n string en 'n naamlose funksie bymekaar tel:
let str = 'str' + function() {return 3;};
console.log(str); // sal 'strfunction() {return 3;}' uitvoer
Hoekom sien ons so 'n vreemde resultaat,
en nie die nommer 3 nie? Omdat die tweede term
nie die resultaat van die funksie se uitvoering is nie, maar die oorspronklike
kode daarvan (ons het nie die funksie aangeroep nie, ons het dit net
geskryf).
Die naam funksionele uitdrukking dui dus daarop dat so 'n funksie deelneem aan 'n uitdrukking.
Toekenning aan 'n veranderlike is ook 'n uitdrukking:
let func = function() {
console.log('!');
};
Jy kan ook, byvoorbeeld, die funksie
as 'n parameter aan console.log gee en dit sal die
oorspronklike kode daarvan na die konsole uitvoer - dit sal ook
as 'n uitdrukking beskou word:
console.log(function() {return 3;});
Hoekom dit belangrik is: want die verskil tussen Function Declaration en Function Expression is glad nie daarin dat die eerste funksie met 'n naam geskep word, en die tweede aanvanklik geen naam het nie. Dit is nie so nie.
Voorbeeld. Hier is 'n funksie sonder naam, maar dit neem deel aan geen uitdrukking nie (dit wil sê daar word geen aksies daarmee uitgevoer nie, eenvoudig gestel):
/*
Hierdie funksie sal 'n Function Declaration wees,
maar met 'n sintaksfout:
*/
function() {
console.log('!');
}
So 'n kode sal 'n fout gee! Hoekom: aangesien die funksie aan geen uitdrukking deelneem nie, beskou die blaaier dit as 'n Function Declaration, maar vind nie die naam daarvan nie en gee 'n fout.
Om die fout te laat verdwyn, moet jy die funksie
deel laat wees van 'n uitdrukking. Byvoorbeeld,
skryf 'n + bewerking voor dit:
+function() { // so 'n kode is korrek
console.log('!');
};
Hoe dit werk: die bewerking + op sigself
doen niks, dit is dieselfde as om
in plaas van die nommer 3 +3 te skryf - dit is toelaatbaar,
maar verander niks.
Maar in die geval van 'n funksie - verander dit. Nou is ons funksie nie net geskryf nie, maar neem deel aan 'n uitdrukking. Daarom sal daar nou geen fout wees nie. Daar sal ook geen resultaat van die funksie se uitvoering wees nie, aangesien ons dit net geskryf het, maar nie aangeroep het nie.
In plaas van + kan jy enigiets skryf.
Byvoorbeeld:
-function() { // so 'n kode is korrek
console.log('!');
};
!function() { // so 'n kode is korrek
console.log('!');
};
Jy kan ook die funksie tussen ronde hakies plaas, in hierdie geval sal dit ook 'n funksionele uitdrukking word:
(function() { // so 'n kode is korrek
console.log('!');
});
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
function func() {
console.log('!');
}
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
let func = function() {
console.log('!');
}
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
+function() {
console.log('!');
}
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
!function func() {
console.log('!');
}
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
-function func() {
console.log('!');
}
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
1 + function func() {
console.log('!');
}
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
(function func() {
console.log('!');
})
Bepaal of die voorgestelde funksie 'n Function Declaration of 'n Function Expression is:
console.log(
function() {
console.log('!');
}
);