Язык программирования не может обойтись без механизма многократного использования кода программы. Такой механизм обеспечивается процедурами или функциями. В JavaScript функция выступает в качестве одного из основных типов данных. Одновременно с этим в JavaScript определен класс объектов Function.
В общем случае любой объект JavaScript определяется через функцию. Для создания объекта используется конструктор, который в свою очередь вводится через Function. Таким образом, с функциями в JavaScript связаны следующие ключевые вопросы:
· функция как тип данных;
· функция как объект;
· функция как конструктор объектов.
Функция как тип данных
Определяют функцию при помощи ключевого слова function:
function f(arg1,arg2,...)
{
/* тело функции */
}
Здесь следует обратить внимание на следующие моменты. Во-первых, function определяет переменную с именем f. Эта переменная имеет тип function:
document.write('Тип переменной f: '+ typeof(f));
// Будет выведено: Тип переменной f: function
Во-вторых, эта переменная, как и любая другая, имеет значение - свой исходный текст:
|
|
var i=5;
function f(a,b,c)
{
if (a>b) return c;
}
document.write('Значение переменной i: '+ i.valueOf());
// Будет выведено:
// Значение переменной i: 5
document.write('Значение переменной f:<BR>'+ f.valueOf());
// Будет выведено:
// Значение переменной f:
// function f(a,b,c)
// {
// if (a>b) return c;
// }
Как видим, метод valueOf() применим как к числовой переменной i, так и к переменной f, и возвращает их значение. Более того, значение переменной f можно присвоить другой переменной, тем самым создав "синоним" функции f:
function f(a,b,c)
{
if (a>b) return c;
else return c+8;
}
var g = f;
alert('Значение f(2,3,2): '+ f(2,3,2));
alert('Значение g(2,3,2): '+ g(2,3,2));
// Будет выведено:
// Значение f(2,3,2): 10
// Значение g(2,3,2): 10
Этим приемом удобно пользоваться для сокращения длины кода. Например, если нужно много раз вызвать методdocument.write(), то можно ввести переменную: var W = document.write (обратите внимание - без скобок!), а затем вызывать: W('<H1>Лекция</H1>').
Коль скоро функцию можно присвоить переменной, то ее можно передать и в качестве аргумента другой функции.
function kvadrat(a)
{ return a*a; }
function polinom(a,kvadrat)
{ return kvadrat(a)+a+5;}
alert(polinom(3,kvadrat));
// Будет выведено: 17