Nuansy funkčných výrazov v JavaScripte
Názov Function Expression nie je daný len tak. Skutočne znamená to, že takéto funkcie sú súčasťou nejakého výrazu.
Napríklad, môžeme spojiť nejaký reťazec a funkciu bez mena:
let str = 'str' + function() {return 3;};
console.log(str); // vypíše 'strfunction() {return 3;}'
Prečo vidíme taký zvlášny výsledok,
a nie číslo 3? Pretože druhý sčítanec
- to nie je výsledok práce funkcie, ale jej zdrojový
kód (veď sme tú funkciu nezavolali, ale jednoducho
napísali).
To znamená, že názov funkčný výraz označuje to, že takáto funkcia sa zúčastňuje nejakého výrazu.
Priradenie k premennej je tiež výraz:
let func = function() {
console.log('!');
};
Môžeme tiež, napríklad, odovzdať funkciu
ako parameter do console.log a ten vypíše
jej zdrojový kód do konzoly - to sa tiež bude
považovať za výraz:
console.log(function() {return 3;});
Prečo je to dôležité: pretože rozdiel medzi Function Declaration a Function Expression vôbec nie je v tom, že prvá funkcia je vytvorená s menom, a druhá pôvodne meno nemá. Tak to nie je.
Príklad. Tu máme funkciu bez mena, ale pri tom nie je súčasťou žiadneho výrazu (to znamená, že s ňou nevykonávame žiadne akcie, povedané jednoducho):
/*
Táto funkcia bude Function Declaration,
ale so syntaktickou chybou:
*/
function() {
console.log('!');
}
Takýto kód vo všeobecnosti vyvolá chybu! Prečo: tak ako funkcia nie je súčasťou žiadneho výrazu, prehliadač ju považuje za Function Declaration, ale nenachádza jej meno a vyvoláva chybu.
Aby chyba zmizla, je potrebné prinútiť funkciu
stať sa súčasťou nejakého výrazu. Napríklad,
napíšeme pred ňou operáciu +:
+function() { // takýto kód je korektný
console.log('!');
};
Ako to funguje: samotná operácia +
nič nerobí, je to rovnako ako napísať
namiesto čísla 3 číslo +3 - prípustné,
ale nič nemení.
Ale v prípade funkcie - mení. Teraz naša funkcia už nie je jednoducho napísaná, ale zúčastňuje sa výrazu. Preto chyba teraz nebude. Výsledku vykonania funkcie tiež nebude, veď sme ju jednoducho napísali, ale nezavolali.
Namiesto + je možné napísať čokoľvek.
Napríklad:
-function() { // takýto kód je korektný
console.log('!');
};
!function() { // takýto kód je korektný
console.log('!');
};
Môžeme tiež vziať našu funkciu do okrúhlych zátvoriek, v tomto prípade sa tiež stane funkčným výrazom:
(function() { // takýto kód je korektný
console.log('!');
});
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
function func() {
console.log('!');
}
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
let func = function() {
console.log('!');
}
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
+function() {
console.log('!');
}
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
!function func() {
console.log('!');
}
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
-function func() {
console.log('!');
}
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
1 + function func() {
console.log('!');
}
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
(function func() {
console.log('!');
})
Určite, či je predstavená funkcia Function Declaration alebo Function Expression:
console.log(
function() {
console.log('!');
}
);