На главную страницу
Форум txt.version   




Статья :: Функции
Оглавление | Назад | Вперёд | Индекс

Глава 6
Функции

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

В главе имеются следующие разделы:

Определение функций


Определение функции состоит из ключевого слова function и:

  • имени функции
  • списка аргументов, заключённых в скобки и разделённых запятыми
  • операторов JavaScript, определяющих функцию, заключённых в фигурные скобки { }. Операторы функции могут содержать вызовы других функций, определённых в текущем приложении.

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

Например, следующий код определяет простую функцию square:

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

Функция square принимает один аргумент number. Эта функция состоит из одного оператора, указывающего возвращаемое значение - аргумент функции, умноженный сам на себя. Оператор return специфицирует значение, возвращаемое функцией.

return number * number

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

function myFunc(theObject) {
   theObject.make="Toyota"
}

mycar = {make:"Honda", model:"Accord", year:1998}
x=mycar.make     // возвращает Honda
myFunc(mycar)    // передаёт объект mycar функции
y=mycar.make     // возвращает Toyota (prop было изменено функцией)

Помимо описанного здесь определения функции, Вы можете также определять объекты Function, как показано в разделе "Объект Function".

Метод это функция, ассоциированная с объектом. Вы может узнать больше об объектах и методах в Главе 7 "Работа с Объектами".

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


В приложениях для Navigator'а Вы можете использовать (или вызывать) любую функцию, определённую на текущей странице. Вы можете также использовать функции, определённые другими именованными окнами или фрэймами.

Определение функции не вызывает её выполнения. Определение функции просто именует функцию и специфицирует, что́ выполняется при вызове функции. Вызов функции реально выполняет специфицированные акции с указанными параметрами. Например, если Вы определили функцию square, Вы можете вызвать её так:

square(5)

Это оператор вызова функции с аргументом 5. Функция выполняет свои операторы и возвращает значение 25.

Аргументы функции не ограничиваются только числами и строками. Вы можете также передавать в функцию объекты. Функция show_props (определённая в разделе "Объекты и Свойства") это пример функции, принимающей в качестве аргумента объект.

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

function factorial(n) {
   if ((n == 0) || (n == 1))
      return 1
   else {
      result = (n * factorial(n-1) )
   return result
   }
}

Вы можете вычислить факториалы значений от 1 до 5:

a=factorial(1) // возвращает 1
b=factorial(2) // возвращает 2
c=factorial(3) // возвращает 6
d=factorial(4) // возвращает 24
e=factorial(5) // возвращает 120

Использование массива arguments


Аргументы обрабатываются в массиве. В функции Вы можете адресовать параметры, передаваемые ей:

arguments[i]
functionName.arguments[i]

где i это порядковый номер аргумента, начиная с 0. Таким образом, первый аргумент, передаваемый функции, это arguments[0]. Общее число аргументов указывается свойством arguments.length.

Используя массив arguments, Вы можете вызвать функцию с большим количеством аргументов, чем объявлено в формальном определении. Это часто используется, если заранее не известно точное количество аргументов, передаваемых функции. Вы можете использовать arguments.length для определения количества аргументов, реально передаваемых функции, а затем работать с каждым аргументом с использованием массива arguments.

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

function myConcat(separator) {
   result="" // инициализирует список
   // итерирует по аргументам
   for (var i=1; i<arguments.length; i++) {
      result += arguments[i] + separator
   }
   return result
}

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

// возвращает "red, orange, blue, "
myConcat(", ","red","orange","blue")
// возвращает "elephant; giraffe; lion; cheetah;"
myConcat("; ","elephant","giraffe","lion", "cheetah")

// возвращает "sage. basil. oregano. pepper. parsley. "
myConcat(". ","sage","basil","oregano", "pepper", "parsley")

См. статью об объекте Function в книге Клиентский JavaScript. Справочник.

Предопределённые функции


В JavaScript есть несколько предопределённых функций:

В следующих разделах рассматриваются эти функции. См. также книгу Клиентский JavaScript. Справочник.

Функция eval


Функция eval вычисляет строку кода JavaScript без ссылки на определённый объект. Синтаксис eval таков:

eval(expr)

где expr это вычисляемая строка.

Если строка представляет выражение, eval вычисляет это выражение. Если аргумент представляет собой один или несколько операторов JavaScript, eval выполняет эти операторы. Не вызывайте eval для вычисления арифметических выражений; JavaScript вычисляет арифметические выражения автоматически.

Функция isFinite


Функция isFinite вычисляет аргумент, чтобы определить, является ли он конечным числом. Синтаксис isFinite:

isFinite(number)

где number это вычисляемое число.

Если аргумент имеет значения NaN, положительная или отрицательная бесконечность, то этот метод возвращает false, иначе возвращает true.

Следующий код проверяет клиентский ввод и определяет, является ли он конечным числом.

if(isFinite(ClientInput) == true)
{
   /* некоторые специальные шаги */
}

Функция isNaN


Функция isNaN вычисляет аргумент, чтобы определить, является ли он "NaN" (не-числом). Синтаксис isNaN:

isNaN(testValue)

где testValue это значение, которое Вы хотите обсчитать.

Функции parseFloat и parseInt возвращают "NaN", если они вычисляют значение, которое не является числом. isNaN возвращает true, если передано "NaN", и false - в ином случае.

Следующий код вычисляет floatValue и определяет, является ли оно числом, а затем вызывает соответствующую процедуру:

floatValue=parseFloat(toFloat)
if (isNaN(floatValue)) {
   notFloat()
} else {
   isFloat()
}

Функции parseInt и parseFloat


Две "parse"-функции, parseInt и parseFloat, возвращают числовое значение при получении строкового аргумента.

Синтаксис parseFloat таков:

parseFloat(str)

где parseFloat разбирает свой аргумент, строку str, и пытается возвратить число с плавающей точкой. Если она обнаруживает символ, отличный от знака (+ или -), числа (0-9), десятичной точки или экспоненты, она возвращает значение, разобранное до этого места, и игнорирует этот символ и все последующие символы. Если первый символ не может быть конвертирован в число, функция возвращает значение "NaN" (не-число).

Синтаксис parseInt таков:

parseInt(str [, radix])

parseInt разбирает первый аргумент, строку str, и пытается возвратить целое число со специфицированной radix (базой), обозначаемой вторым не обязательным аргументом radix. Например, radix 10 указывает на конвертацию десятеричного числа, 8 -восьмеричного, 16 - шестнадцатеричного, и так далее. При radix более 10 буквы латинского алфавита используются для обозначения цифр больше 9. Например, для 16-ричных чисел (база 16), используются английские буквы от A до F.

Если parseInt обнаруживает символ, не являющийся цифрой в специфицированном radix, она игнорирует этот и все последующие символы и возвращает целочисленное значение, разобранное до этого места. Если первый символ не может быть конвертирован в число со специфицированной базой, функция возвращает "NaN." Функция parseInt усекает строку до целочисленных значений.

Функции Number и String


Функции Number и String позволяют конвертировать объект в число или строку. Синтаксис таков:

Number(objRef)
String(objRef)

где objRef это ссылка на объект.

В следующем примере Date-объект конвертируется в читабельную строку.

D = new Date (430054663215)
// возвращает
// "Thu Aug 18 04:37:43 GMT-0700 (Pacific Daylight Time) 1983"
x = String(D)

Функции escape и unescape


Функции escape и unescape позволяют кодировать и декодировать строки. Функция escape возвращает 16-ричное кодовое значение своего аргумента - символа их набора ISO Latin. Функция unescape возвращает ASCII-строку для специфицированного 16-ричного кодового значения.

Синтаксис этих функций таков:

escape(string)
unescape(string)

Эти функции используются в основном в серверном JavaScript для кодирования и декодирования пар имя/значение в URL.

Оглавление | Назад | Вперёд | Индекс

Дата последнего обновления: 25 мая 1999 года.
Copyright (c) 1999 Netscape Communications Corporation

Функции

страницы в данном разделе 
 Дополнительные Статьи  Индекс
 Отображение Ошибок с Помощью Консоли JavaScript  Клиентский JavaScript. Руководство.
 Клиентский JavaScript. Руководство.  Ведрение JavaScript в HTML
 Обработка Событий  Выражения и Операции
 Функции  Словарь
 Значения, Переменные и Литералы  Клиентский JavaScript. Руководство.
 JavaScript. Обзор.  LiveConnect. Обзор.
 LiveAudio и LiveConnect  Mail-Фильтры
 Использование Объектов Navigator'a  Работа с Объектами
 Объектная Модель. Детали.  Приложения
 Специфические Клиентские Возможности  Возможности Ядра Языка
 Работа с LiveConnect  об Этой Книге
 Регулярные Выражения  Безопасность в JavaScript
 Операторы  toc.htm
 whatsnew.htm  windows.htm


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста