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應該支持「調試器」語句,您可以在該腳本中調用該語句以將調試器帶入舞臺。
你可以告訴一個函數到另一個函數並增加一個全局變量,直到瀏覽器本身拋出一個堆棧溢出錯誤。然後你打印你的計數器變量,並且你有一個堆棧深度的粗略值。 – Bojangles