Function NN 2  IE J1  ECMA 1

Функция - группа из одной или более инструкций сценария, которые могут быть вызваны в любое время в течение или после загрузки страницы. Вызов функции не требует ничего большего, чем включение имени функции с набором круглых скобок () внутри другой инструкции сценария, или как значение, назначенное на атрибут обработчика события в тэге HTML.

Функция создаётся определителем function внутри элемента SCRIPT:

function funcName() {...}

Более современные браузеры также позволяют использование конструктора Function, но этот cинтаксис обычно более сложен, чем простое определение функции. Function-объекты, созданные конструктором Function, вычисляются каждый раз, когда используются. Это менее эффективно, чем объявление функции и вызов её в Вашем коде, поскольку объявленные функции компилируются.

Функции могут получать сколько угодно параметров. Параметры могут проходить в виде списка переменных с разделителями-запятыми в паре круглых скобок после имени функции:

function doSomething(param1, param2, ... paramN) {...}

Значение параметра может быть любым типом данных JavaScript, включая ссылки на объекты и массивы. Объект function передаёт все параметры в массив (называемый arguments), который можно исследовать, чтобы извлечь данные параметра.

Функция возвращает значение инструкции запроса после того, как выполнится последняя инструкция внутри неё. Значение может быть возвращено инструкции запроса через инструкцию return. Также инструкция return где-нибудь еще внутри функции прерывает её выполнение в этой точке и возвращает вызвавшей функцию инструкции значение, указанное в круглых скобках ( return(...) ). Если одна ветвь конструкции if в функции возвращает значение, то каждая ветвь, включая основную, должна также возвратить значение, даже если то значение нулевое.

Функции имеют готовый доступ ко всем глобальным переменным, которые определены вне функций где-нибудь в документе. Но переменные, определенные внутри функции (требуются ключевое слово var) доступны только внутри функции.

Чтобы обратиться к объекту function, который определен в другом месте в документе, используется имя функции без круглых скобок. Например, чтобы назначить функцию свойству обработчика события, синтаксис:

objReference.eventHandlerProperty = functionName

В Navigator 4 Вы можете вкладывать функции друг в друга:

function myFuncA() { statements function myFuncB() { statements } }

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

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

parent.otherFrame.someFunction()

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

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

Это удобно при передаче функции другой функции в качестве аргумента. В примере показана функция map, определяемая и вызываемая с анонимной функцией в качестве параметра:

function map(f,a) {
var result=new Array;
for (var i = 0; i != a.length; i++)
result[i] = f(a[i]);
return result;
}

Вызов

map(function(x) {return x * x * x}, [0, 1, 2, 5, 10];

возвращает [0, 1, 8, 125, 1000].

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

function factorial(n) {
if (n <= 1)
return 1;
else
return (n * factorial(n-1));
}

 
Создание функции:

function myFunction([param1[, param2[,...paramN]]]) { statement(s) }
var myFunction = new Function([param1[,...paramN], "statement1[; ...statement2"])
obj.MethodName = function([param1[, param2[,...paramN]]]) { statement(s) }


Свойства:


arguments NN 3  IE J2  ECMA 1
 Только чтение
 

Возвращается массив значений, прошедших как параметры функции. Содержание массива независимо от переменных, определенных для функции. Поэтому, если функция определяет две переменные, но инструкция запроса передает 10 параметров, массив arguments фиксирует все 10 значений в порядке, в котором их пропускали. Инструкции внутри функции тогда могут исследовать длину массива arguments и извлекать значения, как необходимо. Это позволяет одной функции обрабатывать неопределенное число параметров.

Массив arguments доступен только внутри тела функции. Попытка получить доступ к массиву arguments за пределами объявления функции приводит к ошибке.

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

Свойства:

callee (с JavaScript 1.2)

arguments.callee - это свойство локальной переменной arguments, доступной внутри всех объектов функции; arguments.callee больше не используется как свойство в Function.

Свойство callee доступно только внутри тела функции.

Ключевое слово this не ссылается на выполняемую в данный момент функцию. Используйте свойство callee для обращения к функции внутри тела функции.

С JavaScript 1.4 callee не рекомендуется в качестве свойства для Function.arguments, осталось как свойство локальной переменной arguments функции.

caller (с JavaScript 1.1, NES 2.0)

Свойство caller доступно только внутри тела функции.

Если выполняемая в данный момент функция была вызвана с верхнего уровня программы JavaScript, caller имеет значение null.

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

Свойство caller это ссылка на вызывающую функцию, поэтому:

Если Вы используете его в контексте строки, Вы получите результат вызова FunctionName.toString. То есть - декомпилированную каноническую исходную форму функции.

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

Caller не рекомендуется с JavaScript 1.3 и больше не используется

lenght (c JavaScript 1.1)

Специфицирует количество аргументов, передаваемых функции. arguments.length это свойство локальной переменной arguments, доступной внутри всех объектов функции; arguments.length как свойство в Function больше не используется.

arguments.length предоставляет несколько аргументов, реально передаваемых функции. По контрасту, свойство Function.length указывает, сколько аргументов функция ожидает получить

 
Пример:

function myFunc() for (var i = 0; i < myFunc.arguments.length; i++) { ... } }

 
Возвращаемое значение:
Массив значений из любого типа данных JavaScript.

arity NN 4  IE n/a  ECMA n/a
 Только чтение
 

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

 
Пример:

var paramCount = myFunction.arity

 
Возвращаемое значение:
Целое число.

caller NN 3  IE J2  ECMA n/a
 Только чтение
 

Возвращает ссылку на объект function, который содержал инструкцию, вызывающую текущую функцию. . Если данная функция была вызвана с верхнего уровня сценария, то его значение null. Если это свойство используется в контексте, предполагающем его преобразование в строку, то результатом будет функция.caller.toString(), т. е. текст декларации вызвавшей функции.

 
Пример:

function myFunc() if (myFunc.caller == someFuncZ) { process for this function being called by someFuncZ } }

 
Возвращаемое значение:
Функция.

constructor JavaScript 1.1, NES 2.0, ECMA-262
  Чтение/Изменение
 

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

Все объекты наследуют свойство constructor из своих prototype

 
Пример:

o = new Object // или o = {} в JavaScript 1.2
o.constructor == Object
a = new Array // или a = [] в JavaScript 1.2
a.constructor == Array
n = new Number(3)
n.constructor == Number

 
Возвращаемое значение:
Целое число.

length NN 4  IE J3  ECMA 1
 Только чтение
 

Возвращает целое число, представляющее число параметров, определённых в функции. Это свойство может быть исследовано в инструкции вне функции: возможно, в подготовке параметров, которые нужно пропустить в функцию. Navigator всегда возвращает значение 0 (см. свойство arity). length является внешним относительно функции и указывает, сколько аргументов функция ожидает. По контрасту, arguments.length является локальным относительно функции и предоставляет количество аргументов, реально передаваемых функции.

 
Пример:

var paramCount = myFunction.length

 
Возвращаемое значение:
Целое число.

prototype NN 3  IE J2  ECMA 1
 Чтение/Изменение
 

Свойство статического объекта Function. Используйте свойство prototype, чтобы назначить новые свойства и методы будущим образцам функций, созданных в текущем документе. См. для примеров описание свойства Array.prototype. Каждый объект, который может быть создан путём вызова функции constructor, имеет ассоциированное свойство prototype.

 
Пример:

Function.prototype.author = "DG"

 
Возвращаемое значение:
Любые данные, включая функции.

Методы:


apply() JavaScript 1.3
apply(thisArg[, argArray])  
 

Позволяет применять метод одного объекта в контексте другого объекта (вызывающего объекта).

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

apply очень похож на call, за исключением поддерживаемых типов аргументов. Вы можете использовать массив аргументов вместо именованного набора параметров. С помощью apply Вы можете использовать литерал массива, например, apply(this, [name, value]), или объект Array, например, apply(this, new Array(name, value)).

Вы можете также использовать arguments для параметра argArray. arguments это локальная переменная функции. Она может быть использована для всех неспецифицированных аргументов вызываемой функции. Таким образом, Вы не должны знать аргументы вызываемого объекта, когда применяете метод apply. Вы можете использовать arguments для передачи всех аргументов вызываемому объекту. Вызванный объект после этого отвечает за обработку этих аргументов.

 
Возвращаемое значение
Объект Array.
 
Параметры
thisArg Параметр для вызывающего объекта.
argArray Массив аргументов для объекта.

call() JavaScript 1.3
call(thisArg[, arg1[, arg2[, ...]]])  
 

Позволяет вызывать (выполнять) метод одного объекта в контексте другого объекта (вызывающего объекта). С помощью call Вы можете написать метод один раз и наследовать его в другом объекте без необходимости переписывать метод для нового объекта. Этой возможности нет в спецификации ECMA, соответствующей JavaScript 1.3, но ожидается её появление в следующей версии.

 
Возвращаемое значение
Объект Array.
 
Параметры
thisArg Параметр для вызывающего объекта.
arg1, arg2, ... Параметр объекта.

toSource() JavaScript 1.3

Возвращает строку исходного кода функции.

 
Возвращаемое значение
Метод toSource возвращает следующие значения:

Для встроенного объекта Function метод toSource возвращает следующую строку, означающую, что исходный код недоступен:
Function Function() {
[native code]
}

Для специальных функций метод toSource возвращает JavaScript-источник, который определяет объект как строку.

 
Параметры
None.

toString() NN 4  IE J3  ECMA 1

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

 
Возвращаемое значение
Строка.
 
Параметры
None.

valueOf() NN 4  IE J3  ECMA 1

Возвращает значение объекта.

 
Возвращаемое значение
Ссылка на объект function.
 
Параметры
None.


HIVE: All information for read only. Please respect copyright!
Hosted by hive КГБ: Киевская городская библиотека