Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / JavaScript /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Операторы и функции - Программирование от RIN.RU
Операторы и функции



Функции


Декларация функции


Функции являются одним из основных механизмов языка JavaScript; они охватывают ту область, которая в других языках программирования реализуется подпрограммами, процедурами и функциями. Функция в JavaScript - это набор операторов, выполняющих определенную задачу.


Для того, чтобы пользоваться функцией, мы должны сначала ее определить. Декларация функции имеет вид:


function имя(аргументы?) {
операторы
}


Здесь имя - идентификатор, задающий имя функции, аргументы - необязательный список идентификаторов, разделенных запятыми, который содержит имена формальных аргументов функции, а операторы - любой набор операторов, который называется телом функции и исполняется при ее вызове.


Рассмотрим следующий пример:


function cube(number) {
return number * number * number;
}


Эта функция называется cube и имеет один формальный аргумент number. При вызове этой функции вместо формального аргумента подставляется его фактическое значение, функция выполняет возведение этого значения в куб и возвращает полученное число оператором return.


Переменные, декларированные в теле функции, являются локальными, т. е. недоступны вне ее тела. Подробности см. в описании области действия переменных.


Вызов функции


Важно понимать, что появление декларации функции в тексте сценария не означает ее немедленного выполнения; тело функции будет выполняться только тогда, когда какой-либо оператор будет содержать вызов этой функции. Например, функция из предыдущего примера может быть вызвана так:


var x = cube(5);


В результате переменная x получит значение 125.


В JavaScript действуют следующие правила передачи аргументов функции:


  • Аргументы примитивных типов передаются функции по значению. Иными словами, формальным аргументам присваиваются значения фактических аргументов на момент вызова и, если даже операторы в теле функции изменят значение какого-либо аргумента, то это изменение не коснется переменной, чье значение передавалось в качестве аргумента.

  • Объекты (и встроенные, и определенные пользователем) передаются по ссылке. Это означает, что все изменения свойств объекта в теле функции производятся непосредственно в самом объекте, а не в его локальной копии и, следовательно, сохраняются после возврата из функции. Например,




function setBrowser(browser) {
browser.name = "Internet Explorer";
browser.version = "5.5";
}


var myBrowser = {name:"Netscape Navigator", version:"4.7"};
var x = myBrowser.name; // x равно "Netscape Navigator"
setBrowser(myBrowser); // объект myBrowser передается функции
var y = myBrowser.name; // y равно "Internet Explorer"


Рекурсивные функции


Важной особенностью языка JavaScript является то, что функция может вызывать не только другие функции, но и сама себя. Такие функции называются рекурсивными; во многих случаях использование рекурсии позволяет писать краткий код вместо сложных вложенных циклов. Следует, однако, учитывать, что рекурсия работает медленнее, чем обычный цикл, и пользоваться ей только в тех случаях, когда это действительно оправдано.


Приведем пример функции, вычисляющей факториал числа (факториал числа n равен 1 * 2 * ... * n):


function factorial(n) {
if (n <= 1)
return 1;
else
return (n * factorial(n-1));
}


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


Оператор return


Мы видели в предыдущих примерах, что функции JavaScript могут (но не обязаны) возвращать значение. Для указания этого значения используется оператор return, который имеет две формы:


return выражение
return


Первая форма оператора завершает выполнение функции и возвращает значение выражения. Функция, содержащая такой оператор return, должна вызываться как часть выражения присваивания, например x = 2 * cube(a).


Вторая форма оператора завершает выполнение функции и возвращает значение undefined. Функция, содержащая такой оператор return, должна вызываться как оператор, например setBrowser(myBrowser).


Если тело функции не содержит оператора return, то ее выполнение завершается с выполнением последнего оператора тела и возвращается значение undefined.


Объект arguments


При входе в тело функции создается локальный объект arguments, который имеет следующие свойства:


  • Свойство callee с атрибутами { DontEnum }. Начальным значением этого свойства является исполняемый в данный момент объект Function. Это свойство обеспечивает возможность рекурсивного вызова безымянных функций.

  • Свойство length с атрибутами { DontEnum }. Начальным значением этого свойства является количество фактических аргументов, переданных функции при ее вызове.

  • Массив значений фактических аргументов функции. Для доступа к значениям массива используется синтаксис:
    функция.arguments[i]
    где функция - идентификатор, задающий имя текущей функции, а i - номер аргумента, начиная с нуля.


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


function initArray() {
this.length = initArray.arguments.length;
for (var i = 0; i < this.length; i++)
this[i] = initArray.arguments[i];
}


var myFriends = new initArray("Михаил", "Максим", "Сергей", "Леонид");

<<<  Назад
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Типы данных

Выражения и операции

Регулярные выражения

Использование объектов

Примитивные встроенные объекты

Строки: встроенный объект String

Массивы: встроенный объект Array

Дата и время: встроенный объект Date

Встроенные объекты Error, Math и RegExp

Дополнительные возможности JScript

Исполняющая система JScript

Исполняющая система JScript (продолжение)

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь