Javascript.RU

function

Объявить функцию

Синтаксис

function name([param_1] [, param_2] [..., param_n]) {
   statements
}

Аргументы

name
Имя функции
param_1, param_2, ..., param_n
Названия параметров
statements
Тело функции

Описание, примеры

Существует два вида использования этой конструкции:

объявление функции
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 - 12:26
#permalink

В примере про видимость функций происходит вызов функции без параметра alert(decl) , хотя ниже идет ее определение с параметром function decl(a) { } Я чего-то не понимаю или в JavaScript допустим такой вызов функций, хотя определены они с параметром?


Автор: Гость (не зарегистрирован), дата: 21 августа, 2010 - 11:57
#permalink

Тут идет не вызов функции.
Если выполнить данный код, то мы увидим в окне сообщений тело функции. Ни о каком вызове здесь речи не идет.


Автор: Гость - Владимир (не зарегистрирован), дата: 19 мая, 2011 - 14:04
#permalink

Кстати, этот вопрос (для новичка) уместен.

Нет нигде здесь в справочнике описания оператора (или синтаксической конструкции) "вызов функции". Здесь, либо в разделе "Синтаксические конструкции", либо в разделе "Операторы" (что, мне кажется правильнее) надо бы дать информацию: как вызывается функция, как передаются параметры. Если это уже есть - ткните меня туда носом.

(?) Например, мне на текущий момент (в спецификации ECMAScript не смотрел) как / можно ли передать функции аргументы по ссылке, а не по значению. Т. е., чтобы значение переменной, указанной при вызове функции изменилось после вызова этой функции. Знаю способ: передать аргументом массив - он передаётся по ссылке (проверил экспериментально), можно изменять его элементы - изменения сохранятся после возврата из функции. Есть ли более изящный / нормальный способ?
__________
Новичок в JS.


Автор: Гость (не зарегистрирован), дата: 27 декабря, 2012 - 12:59
#permalink

Допустим.


Автор: Гость (не зарегистрирован), дата: 10 февраля, 2011 - 22:11
#permalink

test.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, чтоб не повторялись в след. ф-циях - не помогает.


Автор: Гость (не зарегистрирован), дата: 10 февраля, 2011 - 22:25
#permalink

у FF нету obj.parentElement, которое я использовал ниже, вместо объекта передавалась пустота. parentNode, думаю, поможет...


Автор: Questioner, дата: 1 января, 2012 - 00:36
#permalink

А что означает конструкция:

(function(...) {
  ...
})()

Не уверен, что правильно написал, но, возможно, кто-нибудь поймёт.


Автор: B@rmaley.e><e, дата: 1 января, 2012 - 17:27
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
8 + 9 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum