⊗jsPmFTFENIn 233 of 505 menu

Нюанси на функционалните изрази в JavaScript

Името Function Expression не е дадено просто така. То наистина означава това - че такива функции са част от някакъв израз.

Например, можем да съберем някакъв низ и анонимна функция:

let str = 'str' + function() {return 3;}; console.log(str); // ще изведе 'strfunction() {return 3;}'

Защо виждаме такъв странен резултат, а не числото 3? Защото второто събираемо - това не е резултатът от работата на функцията, а нейният изходен код (все пак ние не извикахме тази функция, а просто я написахме).

Тоест името функционален израз означава, че такава функция взема участие в някакъв израз.

Присвояването към променлива също е израз:

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

Може също, например, да се подаде функция като параметър на console.log и той ще изведе нейния изходен код в конзолата - това също ще се счита за израз:

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

Защо това е важно: защото разликата между Function Declaration и Function Expression изобщо не е в това, че първата функция се създава с име, а втората първоначално няма име. Това не е така.

Пример. Ето ни е функция без име, но при това не участва в нито един израз (то ест с нея не се извършват никакви действия, казано по-просто):

/* Тази функция ще бъде Function Declaration, но със синтактична грешка: */ function() { console.log('!'); }

Такъв код изобщо ще даде грешка! Защо: тъй като функцията не участва в нито един израз, браузърът я счита за Function Declaration, но не намира нейното име и дава грешка.

За да изчезне грешката, трябва да накараме функцията да стане част от някакъв израз. Например, да напишем пред нея операция +:

+function() { // такъв код е коректен console.log('!'); };

Как работи това: самата операция + нищо не прави, това е все едно да напишем вместо числото 3 числото +3 - допустимо, но нищо не променя.

Но в случая с функцията - променя. Сега нашата функция вече не е просто написана, а участва в израз. Затова грешка вече няма да има. Резултат от изпълнение на функцията също няма да има, тъй като ние просто я написахме, но не я извикахме.

Вместо + може да се напише всичко възможно. Например:

-function() { // такъв код е коректен console.log('!'); }; !function() { // такъв код е коректен console.log('!'); };

Може също така да се сложи нашата функция в кръгли скоби, в този случай тя също ще стане функционален израз:

(function() { // такъв код е коректен console.log('!'); });

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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

Определете дали представената функция е Function Declaration или Function Expression:

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