Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Функция как тип данных



Определяют функцию при помощи ключевого слова 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

Все это усиливается при использовании функции eval (), которая в качестве аргумента принимает строку, которую рассматривает как последовательность операторов JavaScript (блок) и выполняет этот блок. В качестве иллюстрации приведем скрипт, который позволяет вычислять функцию f(f(...f(N)...)), где число вложений функции f() задается пользователем.

<SCRIPT>function kvadrat(a){ return a*a; } function SuperPower(){ var N = parseInt(document.f.n.value), K = parseInt(document.f.k.value), L = R = ''; for(i=0; i<K; i++) { L+='kvadrat('; R+=')'; } return eval(L+N+R);}</SCRIPT> <FORM NAME=f> Введите аргумент (число): <INPUT NAME=n><BR> Сколько раз возвести его в квадрат? <INPUT NAME=k><BR> <INPUT TYPE=button value="Возвести" onClick="alert(SuperPower());"></FORM>

3.1. Многократное вложение функции kvadrat() в себя

Обратите внимание на запись L=R=''. Она выполняется справа налево. Сначала происходит присваивание R=''. Операция присваивания выдает в качестве результата значение вычисленного выражения (в нашем случае - пустая строка). Она-то и присваивается далее переменной L.

Поясним работу скрипта в целом. В функции SuperPower() мы сначала считываем значения, введенные в поля формы, и преобразуем их из строк в целые числа функцией parseInt(). Далее с помощью цикла for мы собираем строку L, состоящую из K копий строки " kvadrat(", и строку R, состоящую из K правых скобок ") ". Теперь мы составляем выражение L+N+R, представляющее собой K раз вложенную в себя функцию kvadrat(), примененную к аргументу N. Наконец, с помощью функции eval () вычисляем полученное выражение. Таким образом, вычисляется функция (...((N)2)2...)2.





Дата публикования: 2015-01-24; Прочитано: 198 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...