Анонимные функции

Функция может вообще не иметь названия. В этом случае ссылку на анонимную функцию сохраняют в переменной:

const func = function() { // Присваиваем ссылку на анонимную функцию
   console.log('Сообщение');
};
func(); // Вызываем анонимную функцию через переменную func

Анонимная функция становится видимой только после определения. Если вызов функции поместить перед определением, то будет выведено сообщение об ошибке. При использовании обычных функций ошибки не будет.

Ссылку на вложенную функцию можно вернуть в качестве значения в конструкции return. Чтобы вызвать вложенную функцию, круглые скобки указываются два раза:

const func = function() { // Присваиваем ссылку на анонимную функцию
   return function() {    // Возвращаем ссылку на вложенную функцию
      console.log('Это вложенная функция');
   };
};
func()(); // Вызываем вложенную функцию через переменную func

При использовании анонимных функций следует учитывать, что при указании внутри функции глобальной переменной будет сохранена ссылка на эту переменную, а не на ее значение:

let x = 5;
const func = function() {
   return x; // Сохраняется ссылка, а не значение переменной x !
};
console.log( func() ); // 5
x = 10;                // Изменили значение
console.log( func() ); // 10, а не 5

Анонимные функции захватывают переменные в родительской области видимости (это называется замыканием). Если анонимная функция объявлена внутри функции, то после выхода из функции область видимости сохраняется и мы можем получить доступ к переменным, существовавшим в момент создания анонимной функции:

function test() {
   let x = 10, y = 5;
   return function() {
      return x + y;
   };
}
let func = test();
console.log( func() ); // 15

На самом деле можно присвоить название анонимной функции, но это название будет видимо только внутри анонимной функции. Его можно использовать для рекурсивного вызова функции, а также в целях отладки. Пример указания названия:

const func = function myFunction() {
   console.log('Сообщение');
   console.log(myFunction);    // [Function: myFunction]
};
func();
// myFunction();
// ReferenceError: myFunction is not defined

Анонимную функцию удобно использовать, когда в качестве значения параметра ожидается передача ссылки на функцию:

function func(x, y, fn) {
   console.log( fn(x, y) );
}
const funcAdd = function(x, y) {
   return x + y;
};
const funcSub = function(x, y) {
   return x - y;
};
func(10, 5, funcAdd); // 15
func(10, 5, funcSub); // 5
func(10, 5, function(x, y) {
   return x / y;
}); // 2

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов