Funktsionaalavaldiste nüansid JavaScriptis
Nimetust Function Expression ei ole antud niisama. See tõesti tähendab seda - et sellised funktsioonid on osa mingist avaldisest.
Näiteks võime liita mingi stringi ja nimetuta funktsiooni:
let str = 'str' + function() {return 3;};
console.log(str); // väljastab 'strfunction() {return 3;}'
Miks me näeme sellist kummalist tulemust,
mitte arvu 3? Sellepärast, et teine liidetav
- see pole funktsiooni töö tulemus, vaid selle lähtekood
(me ju ei kutsunud seda funktsiooni välja, vaid lihtsalt
kirjutasime seda).
See tähendab, et nimetus funktsionaalavaldis tähistab seda, et selline funktsioon osaleb mingis avaldises.
Muutujale omistamine on samuti avaldis:
let func = function() {
console.log('!');
};
Samuti võib näiteks edastada funktsiooni
parameetrina console.log-ile ja see väljastab
selle lähtekoodi konsooli - see loetakse samuti
avaldiseks:
console.log(function() {return 3;});
Miks see on oluline: sest Function Declaration ja Function Expression erinevus ei seisne üldse selles, et esimene funktsioon luuakse nimega, aga teine algselt nime ei oma. See pole nii.
Näide. Siin on meil funktsioon ilma nimeta, kuid sellega ei osaleta üheski avaldises (see tähendab, et sellega ei tehta mingit tegevust, lihtsamalt öeldes):
/*
See funktsioon on Function Declaration,
kuid süntaksiveaga:
*/
function() {
console.log('!');
}
Selline kood annab üldse vea! Miks: kuna funktsioon ei osale üheski avaldises, siis brauser peab seda Function Declaration-iks, kuid ei leia selle nime ja annab vea.
Et viga kaoks, tuleb muuta funktsioon
mingi avaldise osaks. Näiteks
kirjutame selle ette tehte +:
+function() { // selline kood on korrektne
console.log('!');
};
Kuidas see töötab: tehe + ise
ei tee midagi, see on sama, kui kirjutada
arvu 3 asemel arv +3 - lubatud,
kuid midagi ei muuda.
Kuid funktsiooni puhul - muudab. Nüüd on meie funktsioon juba mitte lihtsalt kirjutatud, vaid osaleb avaldises. Seetõttu ei teki viga. Funktsiooni täitmistulemust ka ei teki, sest me lihtsalt kirjutasime selle, kuid ei kutsunud välja.
+ asemel võib kirjutada mis tahes.
Näiteks:
-function() { // selline kood on korrektne
console.log('!');
};
!function() { // selline kood on korrektne
console.log('!');
};
Samuti võib võtta meie funktsiooni ümarsulgudesse, sel juhul muutub see samuti funktsionaalavaldiseks:
(function() { // selline kood on korrektne
console.log('!');
});
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
function func() {
console.log('!');
}
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
let func = function() {
console.log('!');
}
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
+function() {
console.log('!');
}
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
!function func() {
console.log('!');
}
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
-function func() {
console.log('!');
}
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
1 + function func() {
console.log('!');
}
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
(function func() {
console.log('!');
})
Määrake, kas esitatud funktsioon on Function Declaration või Function Expression:
console.log(
function() {
console.log('!');
}
);