⊗jsPmFTFENIn 233 of 505 menu

Funkcinių išraiškų niuansai JavaScript

Pavadinimas Function Expression duotas ne be reikalo. Jis tikrai reiškia tai - kad tokios funkcijos yra kokios nors išraiškos dalis.

Pavyzdžiui, mes galime sudėti kokią nors eilutę ir funkciją be pavadinimo:

let str = 'str' + function() {return 3;}; console.log(str); // išvests 'strfunction() {return 3;}'

Kodėl mes matome tokį keistą rezultatą, o ne skaičių 3? Todėl, kad antrasis dėmuo - tai ne funkcijos vykdymo rezultatas, o jos pirminis kodas (juk mes tą funkciją ne iškvietėme, o tiesiog parašėme).

Tai yra, pavadinimas funkcinė išraiška reiškia tai, kad tokia funkcija dalyvauja kokioje nors išraiškoje.

Priskyrimas kintamajam taip pat yra išraiška:

let func = function() { console.log('!'); };

Taip pat galima, pavyzdžiui, perduoti funkciją kaip parametrą į console.log ir jis išves jos pirminį kodą į konsolę - tai taip pat bus laikoma išraiška:

console.log(function() {return 3;});

Kodėl tai svarbu: todėl, kad skirtumas tarp Function Declaration ir Function Expression visai ne tas, kad pirmoji funkcija sukuriama su pavadinimu, o antroji iš pradžių pavadinimo neturi. Tai netiesa.

Pavyzdys. Štai mes turime funkciją be pavadinimo, bet tuo pačiu nedalyvaujančią jokioje išraiškoje (tai yra su ja neatliekami jokie veiksmai, kalbant paprastai):

/* Ši funkcija bus Function Declaration, bet su sintakse klaida: */ function() { console.log('!'); }

Toks kodas apskritai duos klaidą! Kodėl: taip kaip funkcija nedalyvauja jokioje išraiškoje, naršyklė laiko ją Function Declaration, bet neranda jos pavadinimo ir pateikia klaidą.

Kad klaida išnyktų, reikia priverti funkciją tapti kokios nors išraiškos dalimi. Pavyzdžiui, parašykime prieš ją operaciją +:

+function() { // toks kodas korektiškas console.log('!'); };

Kaip tai veikia: pati operacija + nieko nekeičia, tai vis tiek kaip parašyti vietoj skaičiaus 3 skaičių +3 - leistina, bet nieko nekeičia.

Bet funkcijos atveju - keičia. Dabar mūsų funkcija jau ne tik parašyta, bet dalyvauja išraiškoje. Todėl klaidos dabar nebus. Funkcijos vykdymo rezultato taip pat nebus, nes mes ją tiesiog parašėme, bet neiškvietėme.

Vietoj + galima parašyti bet ką. Pavyzdžiui:

-function() { // toks kodas korektiškas console.log('!'); }; !function() { // toks kodas korektiškas console.log('!'); };

Taip pat galima paimti mūsų funkciją į round skliaustus, šiuo atveju ji taip pat taps funkcine išraiška:

(function() { // toks kodas korektiškas console.log('!'); });

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

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

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

let func = function() { console.log('!'); }

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

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

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

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

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

-function func() { console.log('!'); }

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

1 + function func() { console.log('!'); }

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

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

Nustatykite, ar pateikta funkcija yra Function Declaration ar Function Expression:

console.log( function() { console.log('!'); } );
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti