This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Function.caller
Не стандартно: Эта функция не стандартизирована. Мы не рекомендуем использовать нестандартные функции в действующих проектах, так как их поддержка браузерами ограничена, а поведение может измениться или быть удалено. Тем не менее, в некоторых случаях, когда нет стандартного решения, они могут быть подходящей альтернативой.
In this article
Сводка
Свойствоfunction.caller возвращает функцию, которая вызвала указанную функцию.
Описание
Если функцияf была вызвана из кода самого верхнего уровня, значениеf.caller будет равноnull, в противном случае значение будет равно функции, вызвавшейf.
Это свойство пришло на замену удалённого свойстваarguments.caller объектаarguments.
Специальное свойство__caller__, возвращающее объект активации вызывающей функции и, таким образом, позволяющее восстанавливать стек вызовов, было удалено по соображениям безопасности.
Примечания
Обратите внимание, что в случае рекурсии, вы не сможете воссоздать стек вызовов, используя это свойство. Пусть у нас есть функции:
function f(n) { g(n - 1);}function g(n) { if (n > 0) { f(n); } else { stop(); }}f(2);В момент вызова функцииstop(), стек вызовов имеет следующий вид:
f(2) -> g(2) -> f(2) -> g(1) -> f(1) -> g(0) -> stop()
Следующее условие верно:
stop.caller === g && f.caller === g && g.caller === f
так что если вы попытаетесь оттрассировать стек в функцииstop() подобным образом:
var f = stop;var stack = "Трассировка стека:";while (f) { stack += "\n" + f.name; f = f.caller;}то этот цикл никогда не остановится.
Примеры
>Пример: проверка значения свойстваcaller функции
Следующий код проверяет значение свойстваcaller функции.
function myFunc() { if (myFunc.caller == null) { return "Эта функция была вызвана из верхнего уровня!"; } else { return "Эта функция была вызвана из " + myFunc.caller; }}Спецификации
Не является частью какой-либо спецификации. Реализована в JavaScript 1.5.
Совместимость с браузерами
Смотрите также
- Ошибка реализации в SpiderMonkey:Firefox bug 65683