Существует два вида использования этой конструкции:
- объявление функции
-
function func(a) { ... }
- присвоение анонимной функции
-
var func = function(a) { ...}
Их отличие - в области видимости. Присвоенная анонимная функция видна с момента присвоения, а объявленная явно - везде:
Пример: видимость функций
// функции определены ниже
alert(decl) // функция видна, все ок
alert(anon) // функция еще не определена - ошибка
// сами функции
function decl(a) { }
var anon = function(a) { }
Функция, объявленная внутри другой функции, видит переменные внешней функции. Они доступны ей даже тогда, когда родительская функция завершила исполнение. Это называется замыканием.
Значение возвращается оператором return. Функции без return или с return без значения возвращают undefined.
В теле функции доступна специальная переменная arguments, которая содержит параметры и ссылку на объект, представляющий собой текущую функцию (в javascript функции - объекты класса Function):
Пример: arguments
// Вызов
func(5)
// Выведет
function func(a,b) {
alert(arguments.length) // 1
alert(arguments[0]) // 5
alert(arguments[1]) // undefined
alert(arguments.callee) // ссылка на функцию func
}
Автор: Зоркий (не зарегистрирован), дата: 12 июля, 2010 - 11:26
#permalinkВ примере про видимость функций происходит вызов функции без параметра alert(decl) , хотя ниже идет ее определение с параметром function decl(a) { } Я чего-то не понимаю или в JavaScript допустим такой вызов функций, хотя определены они с параметром?
Автор: Гость (не зарегистрирован), дата: 10 февраля, 2011 - 21:11
#permalinktest.js с функциями:
function showProps(obj) { var i, objName=obj+''; for (i in obj) document.write(objName+'.'+i+' = '+obj[i]+'<br />'); } function haveClass(obj,cl) { var r=false, c=obj.className.split(' '); for (var i=0;i<c.length;i++) if (c[i]==cl) r=true; return r; } function findParentClass(obj,cl) { ... } function findChildClass(obj,cl) { ... } function dropDownBlock(obj) {...Хром, Опера, Сафари, ИЕ 6-7 отрабатывают отлично. А Файрфокс 3.6.13 цепляется ко второй ф-ции: "obj is undefined".
Может, подскажите, что не так? Пробовал другие имена вместо obj, чтоб не повторялись в след. ф-циях - не помогает.
Автор: Questioner, дата: 31 декабря, 2011 - 23:36
#permalinkА что означает конструкция:
(function(...) { ... })()Не уверен, что правильно написал, но, возможно, кто-нибудь поймёт.