1. вызывающий абонент
Возвращает ссылку на функцию, которая вызывает текущую функцию.
functionName.caller
Объект FunctionName - это имя выполненной функции.
иллюстрировать
Для функций атрибут абонента определяется только тогда, когда функция выполняется. Если функция вызывается верхним уровнем программы JavaScript, то вызывающий абонент содержит NULL.
Следующий пример иллюстрирует использование атрибута вызывающего абонента:
Кода -копия выглядит следующим образом:
function callerdemo () {
if (arguments.caller) {
var a = callerdemo.caller.tostring ();
предупреждение (а);
} еще {
оповещение («Это верхняя функция»);
}
}
функция handlecaller () {
callerdemo ();
}
Handlecaller ();
функция calleedemo () {
предупреждение (Arguments.callee);
}
Calleedemo ();
2. Callee
Возвращает выполняемый объект функции, то есть тело указанного объекта функции.
[function.] Arguments.callee
Необязательный параметр функции - это имя выполняемого в настоящее время функционального объекта.
иллюстрировать
Начальным значением свойства Callee является выполняемый объект функции.
Свойство Callee является членом объекта аргументов, который представляет собой ссылку на сам объект функции, который способствует рекурсии анонимных функций или для обеспечения инкапсуляции функции. Например, рекурсивный расчет суммы натуральных чисел от 1 до N в следующем примере. Это свойство доступно только тогда, когда выполняется соответствующая функция. Также важно отметить, что Callee имеет атрибут длины, что иногда лучше для проверки. Arguments.length - это длина фактического параметра, а Arguments.callee.length - длина формального параметра. Это можно использовать для определения того, соответствует ли длина формального параметра длине фактического параметра при вызове.
Пример
Кода -копия выглядит следующим образом:
// Callee может печатать себя
функция calleedemo () {
предупреждение (Arguments.callee);
}
// используется для проверки параметров
Функция CalleeLengthDemo (arg1, arg2) {
if (arguments.length == arguments.callee.length) {
window.alert («Убедитесь, что формальные параметры и фактические параметры верны!»);
возвращаться;
} еще {
Alert («Реальная длина аргумента:» +arguments.length);
Alert («Длина размера:» +arguments.callee.length);
}
}
// рекурсивный расчет
var sum = function (n) {
if (n <= 0)
возврат 1;
еще
Вернуть n + Arguments.callee (n - 1)
}
Более общая рекурсивная функция:
Кода -копия выглядит следующим образом:
var sum = function (n) {
if (1 == n) возврат 1;
иначе вернуть n + sum (n-1);
Когда называется: оповещение (сумма (100));
Функция содержит ссылку на саму сумму. Имя функции - это просто имя переменной. Вызовая сумма внутри функции эквивалентна вызовам
Глобальная переменная не может быть хорошо отражена в самом вызове, и использование Callee будет лучшим методом в настоящее время.