Учебник Javascript

В JavaScript функция является значением, таким же как строка или число.
Как и любое значение, объявленную функцию можно вывести, вот так:
function sayHi { alert( "Привет" ); } alert( sayHi ); // выведет код функции
Обратим внимание на то, что в последней строке после sayHi нет скобок. То есть, функция не вызывается, а просто выводится на экран.
Функцию можно скопировать в другую переменную:
function sayHi { // (1) alert( "Привет" ); } var func = sayHi; // (2) func; // Привет // (3) sayHi = null; sayHi; // ошибка (4)
- Объявление (1) как бы говорит интерпретатору "создай функцию и помести её в переменную sayHi
- В строке (2) мы копируем функцию в новую переменную func. Ещё раз обратите внимание: после sayHi нет скобок. Если бы они были, то вызов var func = sayHi записал бы в func результат работы sayHi (кстати, чему он равен? правильно, undefined, ведь внутри sayHi нет return).
- На момент (3) функцию можно вызывать и как sayHi и как func
- …Однако, в любой момент значение переменной можно поменять. При этом, если оно не функция, то вызов (4) выдаст ошибку.
Обычные значения, такие как числа или строки, представляют собой данные. А функцию можно воспринимать как действие.
Это действие можно запустить через скобки, а можно и скопировать в другую переменную, как было продемонстрировано выше.
Существует альтернативный синтаксис для объявления функции, который ещё более наглядно показывает, что функция – это всего лишь разновидность значения переменной.
Он называется «Function Expression» (функциональное выражение) и выглядит так:
var f = function(параметры) { // тело функции };
Например:
var sayHi = function(person) { alert( "Привет, " + person ); }; sayHi('Вася');
«Классическое» объявление функции, о котором мы говорили до этого, вида function имя(параметры) {...}, называется в спецификации языка «Function Declaration».
- Function Declaration – функция, объявленная в основном потоке кода.
- Function Expression – объявление функции в контексте какого-либо выражения, например присваивания.
Несмотря на немного разный вид, по сути две эти записи делают одно и то же:
// Function Declaration function sum(a, b) { return a + b; } // Function Expression var sum = function(a, b) { return a + b; }
Source: learn.javascript.ru