//Глобальный массив
var a= new Array (1,2,4,8);
function sum()
{
var s=0; //локальная переменная для хранения суммы
//Цикл по всем элементам массива a
for (var i in a)
{
s=s+a[i];
}
alert("Сумма элементов массива="+s);
}
function product()
{
var p=1; //локальная переменная для хранения произведения
for (var i in a)
{
p=p*a[i];
}
alert("Произведение элементов массива="+p);
}
var x=prompt("Найти сумму или произведение (0 или 1)?","0");
if (x=="0")
{
sum();
}
if (x=="1")
{
product();
}
При запуске этого кода отображается запрос, на который необходимо ввести 0 или 1. В зависимости от ответа запускается одна из функций: sum() или product(), которые находят сумму или произведение элементов глобального массива a соответственно.
Функции могут возвращать значение. Для этого необходимо использовать оператор возврата return. Вообще этот оператор может встречаться несколько раз в теле функции. Таким образом, функции можно использовать в выражениях (листинг 11.20).
function sum(a,b)
{
return (a+b);
}
var x1=5, x2=6, x3=3, x4=3;
//Отображаем (x1+x2)*(x3+x4)
alert (sum(x1,x2)*sum(x3,x4));
Функция может объявляться в выражении. Обычно в этом случае функция присваивается переменной, которая затем может использоваться в выражении:
var cube=function(x){return x*x*x}
alert(cube(2)+cube(3));
В данном случае объявляется переменная-функция, вычисляющая куб числа.
Иногда в процессе создания функции неизвестно, сколько ей передадут аргументов. В этом случае необходимо воспользоваться объектом arguments. Все аргументы, переданные функции, сохраняются в этом объекте и могут быть извлечены. Например, для доступа к первому аргументу можно использовать следующий код:
var arg1=arguments[0];
Таким образом, аргументы индексируются, начиная с нуля. Для определения общего количества аргументов, переданных функции, можно использовать свойство length объекта arguments.
Листинг 11.21 демонстрирует возможность обработки переменного количества аргументов.
function sum(x1,x2) //Функция содержит не меньше двух аргументов
{
var s=0; //Начальное значение суммы
//Цикл по всем аргументам
for (var i=0;i { s+=arguments[i]; } return (s); }
//Вызываем функцию
alert (sum(1,2,3,4));
alert (sum(1,-3,40,2,5,7));
Аргументами функции могут выступать не только данные простого типа, но и объекты. Однако при передаче функции строки, числа или логической величины в функции создается копия переданного значения и оригинал не изменяется, то есть что бы ни делали с аргументом внутри функции, после завершения функции эта переменная уничтожается, а оригинальная переменная остается прежней. Иначе происходит при передаче объекта. В этом случае копия объекта не создается, а передается ссылка на данный объект. Если бы происходило иначе, то терялось бы много времени и памяти на создание дубликатов. Представьте, сколько потребовалось бы времени на передачу массива из 10 000 элементов, когда фактически можно обойтись передачей одного значения – ссылки на этот массив. Однако программист должен помнить, что работает в функции с оригинальным объектом.