⊗jsPmFTFENIn 233 of 505 menu

Niuanse wyrażeń funkcyjnych w JavaScript

Nazwa Function Expression nie jest nadana bez powodu. Naprawdę oznacza to - że takie funkcje są częścią jakiegoś wyrażenia.

Na przykład, możemy dodać jakiś ciąg znaków i funkcję bez nazwy:

let str = 'str' + function() {return 3;}; console.log(str); // wyświetli 'strfunction() {return 3;}'

Dlaczego widzimy taki dziwny wynik, a nie liczbę 3? Ponieważ drugi składnik - to nie wynik działania funkcji, a jej źródłowy kod (przecież tej funkcji nie wywołaliśmy, a po prostu napisaliśmy).

Czyli nazwa wyrażenie funkcyjne oznacza, że taka funkcja bierze udział w jakimś wyrażeniu.

Przypisanie do zmiennej też jest wyrażeniem:

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

Można również, na przykład, przekazać funkcję jako parametr do console.log i on wyświetli jej źródłowy kod w konsoli - to też będzie uważane za wyrażenie:

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

Dlaczego to jest ważne: ponieważ różnica między Function Declaration a Function Expression wcale nie polega na tym, że pierwsza funkcja jest tworzona z nazwą, a druga początkowo nie ma imienia. Tak nie jest.

Przykład. Oto mamy funkcję bez nazwy, ale przy tym nie bierze udziału w żadnym wyrażeniu (to znaczy nie jest z nią wykonywana żadna akcja, mówiąc prosto):

/* Ta funkcja będzie Function Declaration, ale z błędem składniowym: */ function() { console.log('!'); }

Tak kod w ogóle zwróci błąd! Dlaczego: tak jak funkcja nie bierze udziału w żadnym wyrażeniu, to przeglądarka uważa ją za Function Declaration, ale nie znajduje jej nazwy i zwraca błąd.

Aby błąd zniknął, trzeba sprawić, żeby funkcja stała się częścią jakiegoś wyrażenia. Na przykład, napiszmy przed nią operację +:

+function() { // taki kod jest poprawny console.log('!'); };

Jak to działa: sama operacja + nic nie robi, to tak jak napisać zamiast liczby 3 liczbę +3 - dopuszczalne, ale nic nie zmienia.

Ale w przypadku funkcji - zmienia. Teraz nasza funkcja już nie jest po prostu napisana, a bierze udział w wyrażeniu. Dlatego błędu już nie będzie. Wyniku wykonania funkcji też nie będzie, przecież ją po prostu napisaliśmy, ale nie wywołaliśmy.

Zamiast + można napisać cokolwiek. Na przykład:

-function() { // taki kod jest poprawny console.log('!'); }; !function() { // taki kod jest poprawny console.log('!'); };

Można również wziąć naszą funkcję w okrągłe nawiasy, w tym przypadku również stanie się wyrażeniem funkcyjnym:

(function() { // taki kod jest poprawny console.log('!'); });

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

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

Określ, czy przedstawiona funkcja jest Function Declaration czy Function Expression:

console.log( function() { console.log('!'); } );
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć