Можно ли узнать, откуда вызывается функция? Если да, то как определить, если функция вызывается из глобальной области, из другой функции или, возможно, из консоли браузера?
Взгляните на следующий пример:
<script>
function myFunc1() {
// some code
myFunc2(); // I was called from myFunc1()
}
function myFunc2() {
var callerName = new String;
callerName = arguments.callee.caller.name;
// some code
alert('I was called from ' + callerName + ' function');
}
myFunc2(); // I was called from global scope
</script>
Я знаю, что эта строка callerName = arguments.callee.caller.name;
в приведенном выше примере дала бы мне имя функции звонящего. Но я не знаю, как определить, вызвана ли функция из глобальной области. Например, если я изменяю myFunc2()
и добавляю оператор if else
, чтобы проверить, возвращает ли arguments.callee.caller.name
значение undefined
, зная, что это произойдет, когда функция вызывается из глобальной области:
myFunc2() {
var callerName = new String;
callerName = arguments.callee.caller.name;
if(callerName == undefined) {
alert('I was called from global scope');
} else {
alert('I was called from ' + callerName + ' function');
}
}
Однако это не сработает, если вызов myFunc2()
вызывается из глобальной области, а callerName = arguments.callee.caller.name;
приведет к тому, что JavaScript выведет следующую ошибку:
TypeError: 'null' is not an object (evaluating 'arguments.callee.caller.name')
Итак, я вернулся к квадрату, и вопрос все еще остается:
- Как определить, вызвана ли функция из глобальной области?
- Если он вызван из глобальной области, это из консоли браузера?