use*_*667 7 javascript stack-overflow stack
有没有办法确定使用javascript本身在javascript中执行的所有函数的堆栈深度?
我想它可能涉及修改Function原型,但我真的不知道.
另外,能够在堆栈深度足够高的任何时候断开都是很好的.
原因是我在IE中有一个堆栈溢出错误,显然是不可调试的.我很懒,而且我宁愿不必去寻找我正在寻找原因的代码.
谢谢你帮助我的懒惰.
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应该支持"调试器"语句,您可以在该脚本中调用该语句以将调试器带到舞台上.
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |