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:

javascriptlet 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:

javascriptlet 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:

javascriptconsole.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):

javascript/*
  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 +:

javascript+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:

javascript-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:

javascript(function() { // takšna koda je pravilna
  console.log('!');
});
Задание 1

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascriptfunction func() {
  console.log('!');
}
Задание 2

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascriptlet func = function() {
  console.log('!');
}
Задание 3

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascript+function() {
  console.log('!');
}
Задание 4

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascript!function func() {
  console.log('!');
}
Задание 5

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascript-function func() {
  console.log('!');
}
Задание 6

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascript1 + function func() {
  console.log('!');
}
Задание 7

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascript(function func() {
  console.log('!');
})
Задание 8

Določite, ali je predstavljena funkcija Function Declaration ali Function Expression:

javascriptconsole.log(
  function() {
    console.log('!');
  }
);