Клиентский JavaScript. Руководство по Использованию

Глава 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.

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

 



 

 

Наши ссылки на веб-страницы, можно скопировать html-код ссылки


Книги по математике и физике, программы HTML, компьютерные технологии

Документация HTML, XML, JavaScript на русском языке для разработчиков W3C

   Примечание. Удобная текстовая ссылка для форумов, блогов, цитирования материалов веб-сайта, код html можно скопировать и просто вставить в Ваши веб-страницы при цитировании материалов нашего веб-сайта. Материал носит неофициальный характер и приведен для ознакомления.