ECMAscript довольно долго поддерживается свойством Function.prototype.caller
. Даже если он устарел в строгом ES5, IE все равно должен его поддерживать. Таким образом, вы можете в основном пройтись по задействованным функциям.
function one() {
two();
}
function two() {
three();
}
function three() {
var caller = three.caller;
console.log('caller was: ', caller.name);
while( caller = caller.caller ) {
console.log('caller was: ', caller.name);
}
}
(function outer() {
one();
}());
Это будет выводить:
caller was: two
caller was: one
caller was: _outer
Итак, если вы знаете, в какой функции происходит ошибка, вы получите полный ответ на вопрос, как изначально вызывался этот метод. Если вы только после глубины, вы можете просто посчитать, сколько было сделано целых чисел по свойству caller.caller
. По крайней мере, IE8 должен поддерживать оператор «отладчик», который можно просто вызвать в этом скрипте, чтобы вывести отладчик на сцену.