Funkcionālo izteiksmju nianses JavaScript
Nosaukums Function Expression nav dots velti. Tas tiešām nozīmē to - ka šādas funkcijas ir kādas izteiksmes daļa.
Piemēram, mēs varam saskaitīt kādu virkni un bezvārda funkciju:
let str = 'str' + function() {return 3;};
console.log(str); // izvadīs 'strfunction() {return 3;}'
Kāpēc mēs redzam tādu dīvainu rezultātu,
nevis skaitli 3? Tāpēc, ka otrais saskaitāmais
- nav funkcijas darbības rezultāts, bet tās pirmavots
(jo mēs šo funkciju neizsaucām, bet vienkārši
uzrakstījām).
Tas ir, nosaukums funkcionālā izteiksme apzīmē to, ka šāda funkcija piedalās kādā izteiksmē.
Piešķiršana mainīgajam arī ir izteiksme:
let func = function() {
console.log('!');
};
Var arī, piemēram, padot funkciju
kā parametru console.log un tas izvadīs
tās pirmavotu konsolē - tas arī tiks
uzskatīts par izteiksmi:
console.log(function() {return 3;});
Kāpēc tas ir svarīgi: tāpēc, ka atšķirība starp Function Declaration un Function Expression nav tajā, ka pirmā funkcija tiek izveidota ar vārdu, bet otrā sākotnēji vārda nav. Tā nav taisnība.
Piemērs. Lūk, mums ir funkcija bez vārda, bet tajā pašā laikā nepiedalās nevienā izteiksmē (tas ir, ar to netiek veiktas nekādas darbības, runājot vienkāršāk):
/*
Šī funkcija būs Function Declaration,
bet ar sintakses kļūdu:
*/
function() {
console.log('!');
}
Šāds kods vispār izdos kļūdu! Kāpēc: tā kā funkcija nepiedalās nevienā izteiksmē, tad pārlūks to uzskata par Function Declaration, bet neatrod tās vārdu un izdod kļūdu.
Lai kļūda pazustu, vajag padarīt funkciju
kādas izteiksmes daļu. Piemēram,
uzrakstīsim pirms tās operāciju +:
+function() { // šāds kods ir korekts
console.log('!');
};
Kā tas strādā: pati operācija +
nekko nedara, tas ir tāpat kā uzrakstīt
skaitļa 3 vietā skaitli +3 - pieļaujami,
bet neko nemaina.
Bet funkcijas gadījumā - maina. Tagad mūsu funkcija vairs nav vienkārši uzrakstīta, bet piedalās izteiksmē. Tāpēc kļūdas vairs nebūs. Funkcijas izpildes rezultāta arī nebūs, jo mēs to vienkārši uzrakstījām, bet neizsauciām.
+ vietā var uzrakstīt jebko.
Piemēram:
-function() { // šāds kods ir korekts
console.log('!');
};
!function() { // šāds kods ir korekts
console.log('!');
};
Var arī ievietot mūsu funkciju apaļās iekavās, šajā gadījumā tā arī kļūs par funkcionālo izteiksmi:
(function() { // šāds kods ir korekts
console.log('!');
});
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
function func() {
console.log('!');
}
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
let func = function() {
console.log('!');
}
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
+function() {
console.log('!');
}
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
!function func() {
console.log('!');
}
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
-function func() {
console.log('!');
}
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
1 + function func() {
console.log('!');
}
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
(function func() {
console.log('!');
})
Noteikt, vai attēlotā funkcija ir Function Declaration vai Function Expression:
console.log(
function() {
console.log('!');
}
);