Существует два вида использования этой конструкции:
объявление функции
functionfunc(a) { ... }
присвоение анонимной функции
varfunc = function(a) { ...}
Их отличие - в области видимости. Присвоенная анонимная функция видна с момента присвоения, а объявленная явно - везде:
Пример: видимость функций
01
// функции определены ниже
02
03
alert(decl) // функция видна, все ок
04
05
06
alert(anon) // функция еще не определена - ошибка
07
08
// сами функции
09
functiondecl(a) { }
10
varanon = function(a) { }
Функция, объявленная внутри другой функции, видит переменные внешней
функции. Они доступны ей даже тогда, когда родительская функция
завершила исполнение. Это называется замыканием.
Значение возвращается оператором return. Функции без return или с return без значения возвращают undefined.
В теле функции доступна специальная переменная arguments, которая содержит параметры и ссылку на объект, представляющий собой текущую функцию (в javascript функции - объекты класса Function):