Nianse funkcionalnih izrazov v JavaScript
Ime Function Expression ni dano brez razloga. Resnično pomeni to - da so takšne funkcije del kakšnega izraza.
Na primer, lahko seštejemo nek niz in brezimno funkcijo:
let str = 'str' + function() {return 3;};
console.log(str); // izpiše 'strfunction() {return 3;}'
Zakaj vidimo tako čuden rezultat,
in ne številko 3? Ker drugi člen
- ni rezultat delovanja funkcije, ampak njena izvorna
koda (saj te funkcije nismo poklicali, ampak smo jo samo
napisali).
To pomeni, da ime funkcionalni izraz označuje, da taka funkcija sodeluje v kakšnem izrazu.
Tudi dodelitev spremenljivki je izraz:
let func = function() {
console.log('!');
};
Lahko tudi, na primer, posredujemo funkcijo
kot parameter v console.log in ta bo izpisal
njeno izvorno kodo v konzolo - tudi to bo
veljalo za izraz:
console.log(function() {return 3;});
Zakaj je to pomembno: ker razlika med Function Declaration in Function Expression sploh ni v tem, da je prva funkcija ustvarjena z imenom, druga pa sprva nima imena. To ni res.
Primer. Tukaj imamo funkcijo brez imena, vendar ne sodeluje v nobenem izrazu (to pomeni, da z njo ne izvajamo nobenih dejanj, preprosto povedano):
/*
Ta funkcija bo Function Declaration,
vendar s sintaktično napako:
*/
function() {
console.log('!');
}
Takšna koda bo povzročila napako! Zakaj: ker funkcija ne sodeluje v nobenem izrazu, jo brskalnik obravnava kot Function Declaration, vendar ne najde njenega imena in povzroči napako.
Da napaka izgine, moramo funkcijo spremeniti
v del kakšnega izraza. Na primer,
napišimo pred njo operacijo +:
+function() { // takšna koda je pravilna
console.log('!');
};
Kako to deluje: operacija + sama po sebi
nič ne naredi, to je enako kot če bi namesto številke
3 napisali +3 - dopustno,
vendar nič ne spremeni.
Toda v primeru funkcije - spremeni. Zdaj naša funkcija ni več samo napisana, ampak sodeluje v izrazu. Zato napake ne bo več. Rezultata izvajanja funkcije tudi ne bo, saj smo jo samo napisali, vendar je nismo poklicali.
Namesto + lahko napišemo karkoli.
Na primer:
-function() { // takšna koda je pravilna
console.log('!');
};
!function() { // takšna koda je pravilna
console.log('!');
};
Lahko tudi našo funkcijo damo v okrogle oklepaje, v tem primeru bo prav tako postala funkcionalni izraz:
(function() { // takšna koda je pravilna
console.log('!');
});
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
function func() {
console.log('!');
}
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
let func = function() {
console.log('!');
}
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
+function() {
console.log('!');
}
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
!function func() {
console.log('!');
}
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
-function func() {
console.log('!');
}
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
1 + function func() {
console.log('!');
}
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
(function func() {
console.log('!');
})
Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:
console.log(
function() {
console.log('!');
}
);