使用javascript在javascript中确定堆栈深度

use*_*667 7 javascript stack-overflow stack

有没有办法确定使用javascript本身在javascript中执行的所有函数的堆栈深度?

我想它可能涉及修改Function原型,但我真的不知道.

另外,能够在堆栈深度足够高的任何时候断开都是很好的.

原因是我在IE中有一个堆栈溢出错误,显然是不可调试的.我很懒,而且我宁愿不必去寻找我正在寻找原因的代码.

谢谢你帮助我的懒惰.

jAn*_*ndy 5

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();
}());
Run Code Online (Sandbox Code Playgroud)

这将输出:

caller was: two
caller was: one
caller was: _outer
Run Code Online (Sandbox Code Playgroud)

因此,如果您知道错误发生在哪个函数中,那么您将获得最初调用此方法的答案.如果你只是在深度之后,你可以计算出有多少关于caller.caller物业的交互.至少IE8应该支持"调试器"语句,您可以在该脚本中调用该语句以将调试器带到舞台上.