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

// Функции - это параметризованные блоки программного кода JavaScript,

// которые можно вызывать многократно.

function plus1(x) { // Определить функцию с именем "plusr и с параметром "х"

  return х+1;       // Вернуть значение на 1 больше полученного

}                   // Функции заключаются в фигурные скобки

plus1(y) // => 4: у имеет значение 3, поэтому этот вызов вернет 3+1

var square = function(x) { // Функции можно присваивать переменным

  return х*х;              // Вычислить значение функции

};                         // Точка с запятой отмечает конец присваивания.

square(plus1(y))           // => 16: вызов двух функций в одном выражении

При объединении функций с объектами получаются методы.

// Функции, присвоенные свойствам объектов, называются методами.

// Все объекты в JavaScript имеют методы:

var а = [];    // Создать пустой массив

а.push(1,2,3); // Метод push() добавляет элементы в массив

a.reverse();   // Другой метод: переставляет элементы в обратном порядке

// Можно определять собственные методы. Ключевое слово "this" ссылается на объект,

// в котором определен метод: в данном случае на массив points,

points.dist = function() { // Метод вычисления расстояния между точками

var р1 = this[0];      // Первый элемент массива, относительно которого вызван метод

var р2 = this[1];      // Второй элемент объекта "this"

var а = р2.х-р1.х;     // Разность координат X

var b = р2.у-р1.у;     // Разность координат Y

return Math.sqrt(a*a + // Теорема Пифагора

                 b*b); // Math.sqrtO вычисляет корень квадратный

};

points.dist() // => 1.414: расстояние между 2-мя точками

Теперь, как было обещано, рассмотрим несколько функций, которые демонстрируют применение наиболее часто используемых управляющих инструкций JavaScript:

// В JavaScript имеются условные инструкции и инструкции циклов, синтаксически

// похожие на аналогичные инструкции С, C++, Java и в других языках.

function abs(x) {  // Функция, вычисляющая абсолютное значение

  if (х >= 0) {    // Инструкция if ...

    return х;      // выполняет этот код, если сравнение дает true.

  }                // Конец предложения if.

  else {           // Необязательное предложение else выполняет свой код,

    return -x;     // если сравнение дает значение false.

  }                // Фигурные скобки можно опустить, если предложение

                   // содержит 1 инструкцию.

}                  // Обратите внимание на инструкции return внутри if/else.

function factorial(n) { // Функция, вычисляющая факториал

  var product = 1;      // Начать с произведения, равного 1

  while(n > 1) {        // Повторять инструкции в {}, пока выраж. в () истинно

    product *= n;       // Сокращенная форма выражения product = product * n;

    n--;                // Сокращенная форма выражения n = п - 1

  }                     // Конец цикла

  return product;       // Вернуть произведение

}

factorial(4)            // => 24: 1*4*3*2

function factorial2(n) { // Другая версия, использующая другой цикл

  var і, product = 1;    // Начать с 1

  for(i=2; і <= n; i++)  // і автоматически увеличивается с 2 до n

    product *= i;        // Выполнять в каждом цикле. {} можно опустить,

                         // если тело цикла состоит из 1 инструкции

  return product;        // Вернуть факториал

}

factorial2(5)            // => 120: 1*2*3*4*5

JavaScript - объектно-ориентированный язык, но используемая в нем объектная модель в корне отличается от модели, используемой в большинстве других языков. В главе 9 «Классы и модули» детально рассматривается объектно-ориентированное программирование на языке JavaScript на большом количестве примеров; эта глава является одной из самых больших в книге. Ниже приводится очень простой пример, демонстрирующий определение класса JavaScript для представления точек на плоскости. Объекты, являющиеся экземплярами этого класса, обладают единственным методом с методом r(), который вычисляет расстояние между данной точкой и началом координат: