JavaScript - Функция в переменной

Статья, в которой рассмотрим ещё один способ создания функции - посредством выражения определения. Кроме этого разберём отличие этого способа объявления функции от традиционного.

Создание функции посредством выражения определения

В JavaScript создать функцию можно не только с помощью традиционного способа (объявления - Traditional Declarations), но и посредством выражения определения (Definition Expressions). Этот способ определения функции в некоторых источниках носит названия функционального литерала.

Основная идея Definition Expressions заключается в том, что описание функции используют в качестве значения некоторой переменной или выражения.

Сравнение синтаксиса функции, созданной традиционным образам и с помощью выражения определения
Сравнение синтаксиса функции, созданной традиционным образам и с помощью выражения определения

Например, переменная sum будет содержать описание функции, которая будет выводить в консоль сумму 2 чисел, указанных в качестве параметра.

var sum = function(num1,num2) {
  return console.log(num1+num2);
};

Вызов функции, созданной на основании выражения определения, осуществляется по имени переменной.

//например, вызовем функцию, которая содержится в переменной sum и передадим ей 2 аргумента.
sum(7,4);

Внимание: В выражении определения имя функции не указывается. Функция, которая описана без имени, называется анонимной.

Обратите внимание на то, что JavaScript позволяет использовать в синтаксисе функции, которая создана как выражение определения, имя. Но, это имеет смысл только тогда, когда к ней необходимо обратиться внутри её же тела. Например, при написании рекурсивных функций. Другого применения данная возможность не даёт, так как обратиться к функции, определённой таким образом, за её пределами, по имени нельзя.

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

var factorial = function fact(num) {
  if (num<=1) return 1; 
  else return num = num*fact(num-1);
};
// выведем в консоль результат вызова функции factorial(5)
console.log(factorial(5));

Этот код определяет функцию и сохраняет ссылку на неё в переменную factorial. Для вызова функции внутри этой функции используем имя fact. Обратите внимание, что обратиться к функции вне её тела по имени fact нельзя, для этого необходимо использовать переменную factorial.

Но и в этом случае можно обойтись без имени, т.к. JavaScript позволяет вызвать функцию внутри своего тела с помощью свойства callee объекта arguments.

var factorial = function(num) {
  if (num<=1) return 1; 
  else return num = num*arguments.callee(num-1);
};
// выведем в консоль результат вызова функции factorial(5)
console.log(factorial(5));

JavaScript - Самовызывающаяся функция

Функцию, определённую посредством выражения определения, можно вызвать немедленно. Для этого после тела функции необходимо поставить круглые скобки и указать в них при необходимости аргументы.

Например, вызовем функцию sum немедленно со значениями параметров 7 и 4.

var sum = function(num1,num2) {
  return console.log(num1+num2);
}(7,4);

Процесс немедленного вызова функции иногда называют инициализацией или инстанциацией функции.

Выражение определения функции очень часто используют, если необходимо её выполнить один раз и немедленно. Для этого даже можно не использовать переменную, а сразу написать вычисляемое выражение, т.е. обернуть определение анонимной функции в круглые скобки.

(function(num1,num2) {
  return console.log(num1+num2);
}(7,4));

Вывод: Способ объявления функции с помощью выражения определения позволяет использовать функцию как переменную. Данная возможность языка JavaScript является очень интересной и позволяет создавать более гибкие сценарии.



   JavaScript и jQuery 0    1463 0

Комментарии (1)

  1. Иван # 0
    Лучшая статья по этой теме.Спасибо!

    Вы должны авторизоваться, чтобы оставлять комментарии.