>
> 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(), который вычисляет расстояние между данной точкой и началом координат:
>// Определение функции-конструктора для инициализации нового объекта Point
>function Point(x,y) { // По соглашению имя конструкторов начинается с заглавного символа
> this.x = x; // this - ссылка на инициализируемый объект
> this.у = у; // Сохранить аргументы в свойствах объекта
>} // Ничего возвращать не требуется
>// Чтобы создать новый экземпляр, необходимо вызвать функцию-конструктор
>// с ключевым словом "new"
>var р = new Point(1, 1); // Точка на плоскости с координатами (1,1)
>// Методы объектов Point определяются за счет присваивания функций свойствам
>// объекта-прототипа, ассоциированного с функцией-конструктором.
>Point.prototype.r = function() {
> return Math.sqrt( // Вернуть корень квадратный от x>2 + y>2
> this.x * this.x + // this - это объект Point, относительно которого...