Выбрать главу

• Пара фигурных скобок с нулем или более инструкций JavaScript внутри. Эти инструкции составляют тело функции: они выполняются при каждом вызове функции.

В примере 8.1 показано несколько определений функций в виде инструкций и выражений. Обратите внимание, что определения функций в виде выражений удобно использовать, только если они являются частью более крупных выражений, таких как присваивание или вызов функции, которые выполняют некоторые действия с помощью вновь объявленной функции.

Именование функций

В качестве имени функции может использоваться любой допустимый идентификатор. Старайтесь выбирать функциям достаточно описательные, но не длинные имена. Искусство сохранения баланса между краткостью и информативностью приходит с опытом. Правильно подобранные имена функций могут существенно повысить удобочитаемость (а значит, и простоту сопровождения) ваших программ.

Чаще всего в качестве имен функций выбираются глаголы или фразы, начинающиеся с глаголов. По общепринятому соглашению имена функций начинаются со строчной буквы. Если имя состоит из нескольких слов, в соответствии с одним из соглашений они отделяются друг от друга символом подчеркивания, примерно так: like_this(), по другому соглашению все слова, кроме первого, начинаются с прописной буквы, примерно так: likeThis(). Имена функций, которые, как предполагается, реализуют внутреннюю, скрытую от посторонних глаз функциональность, иногда начинаются с символа подчеркивания.

В некоторых стилях программирования или в четко определенных программных платформах бывает полезно давать наиболее часто используемым функциям очень короткие имена. Примером может служить библиотека jQuery клиентского JavaScript (описываемая в главе 19), в которой широко используется функция с именем $() (да-да, просто знак доллара). (В разделе 2.4 уже говорилось, что в идентификаторах JavaScript помимо алфавитно-цифровых символов допускается использовать знаки доллара и подчеркивания.)

*********************************************************

Пример 8.1. Определения JavaScript-функций

// Выводит имена и значения всех свойств объекта о. Возвращает undefined,

function printprops(o) {

  for(var p in o)

    console.log(p + ": " + o[p] + "\n");

}

// Вычисляет Декартово расстояние между точками (х1,у1) и (х2,у2).

function distance(x1, у1. х2, у2) {

  var dx = х2 - х1; var dy = у2 - у1;

  return Math.sqrt(dx*dx + dy*dy);

}

// Рекурсивная функция (вызывающая сама себя), вычисляющая факториал

// Напомню, что х! - это произведение х и всех положительных целых чисел, меньше X.

function factorial(x) {

  if (х <= 1) return 1;

  return x * factorial(x-1);

}

// Следующее выражение определяет функцию, вычисляющую квадрат аргумента.

// Обратите внимание, что она присваивается переменной

var square = function(x) { return x*x; }

// Выражения определения функций могут иметь имена, что позволяет

// производить рекурсивные вызовы.

var f = function fact(x) { if (x <= 1) return 1; else return x*fact(x-1); };

// Выражения определения функций могут также использоваться в качестве

// аргументов других выражений: