Нијанси на функционалните изрази во JavaScript
Името Function Expression не е дадено случајно. Тоа навистина значи дека ваквите функции се дел од некој израз.
На пример, можеме да собереме некој стринг и анонимна функција:
let str = 'str' + function() {return 3;};
console.log(str); // ќе испише 'strfunction() {return 3;}'
Зошто гледаме таков чуден резултат,
a не бројот 3? Затоа што вториот собирок
- oва не е резултат од работата на функцијата, туку нејзиниот изворен
код (бидејќи ние не ја повикавме таа функција, туку само
ја напишавме).
Oдносно името функционален израз значи дека таквата функција зема учество во некој израз.
Доделувањето на променлива исто така е израз:
let func = function() {
console.log('!');
};
Може исто така, на пример, да се пренесе функција
како параметар во console.log и тоа ќе го испише
нејзиниот изворен код во конзола - ова исто така ќе
се смета за израз:
console.log(function() {return 3;});
Зошто ова е важно: затоа што разликата помеѓу Function Declaration и Function Expression не е во тоа што првата функција е создадена со име, а втората првично нема име. Toа не е така.
Пример. Eве имаме функција без име, но при тоа не учествува во ниеден израз (тoа e, не се вршат никакви дејства со неа, да кажеме едноставно):
/*
Оваа функција ќе биде Function Declaration,
но со синтаксичка грешка:
*/
function() {
console.log('!');
}
Ваков код воопшто ќе даде грешка! Зошто: бидејќи функцијата не учествува во ниеден израз, прелистувачот ја смета за Function Declaration, но не го наоѓа нејзиното име и дава грешка.
За да исчезне грешката, треба да се направи функцијата
да стане дел од некој израз. На пример,
да напишеме пред неа операција +:
+function() { // ваков код е коректен
console.log('!');
};
Како работи ова: самата по себе операцијата +
ништо не прави, oва е исто како да се напише
наместо бројот 3 бројот +3 - e допуштено,
но ништо не менува.
Но, во случајот со функцијата - менува. Сега нашата функција веќе не е само напишана, туку учествува во израз. Затоа нема да има грешка. Резултат од извршување на функцијата исто така нема да има, бидејќи ние само ја напишавме, но не ја повикавме.
Наместо + може да се напише што било.
На пример:
-function() { // ваков код е коректен
console.log('!');
};
!function() { // ваков код е коректен
console.log('!');
};
Може исто така да се стави нашата функција во кругли загради, во овој случај таа исто така ќе стане функционален израз:
(function() { // ваков код е коректен
console.log('!');
});
Определи дали претставената функција e Function Declaration или Function Expression:
function func() {
console.log('!');
}
Определи дали претставената функција e Function Declaration или Function Expression:
let func = function() {
console.log('!');
}
Определи дали претставената функција e Function Declaration или Function Expression:
+function() {
console.log('!');
}
Определи дали претставената функција e Function Declaration или Function Expression:
!function func() {
console.log('!');
}
Определи дали претставената функција e Function Declaration или Function Expression:
-function func() {
console.log('!');
}
Определи дали претставената функција e Function Declaration или Function Expression:
1 + function func() {
console.log('!');
}
Определи дали претставената функција e Function Declaration или Function Expression:
(function func() {
console.log('!');
})
Определи дали претставената функција e Function Declaration или Function Expression:
console.log(
function() {
console.log('!');
}
);