在javascript中使用javascript确定堆栈深度
determine stack depth in javascript using javascript
是否有一种方法可以通过使用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();
}());
输出:
caller was: two
caller was: one
caller was: _outer
如果你知道在哪个函数中发生了错误,那么你就得到了答案,一直到这个方法最初是如何被调用的。如果你只是在深度之后,你可以计算在caller.caller
属性上进行了多少次交互。至少IE8应该支持"debugger"语句,你可以在脚本中调用它来将调试器带到舞台上。
function stackDepth() {
var c=stackDepth.caller, depth=0;
while (c) { c = c.caller; depth++; }
return depth;
}
Chrome似乎认为控制台的堆栈深度已经是3了,所以也许对于每个JavaScript环境,你需要确定一个初始基线深度并从中减去。
stackDepth(); // => 3
(function(){return stackDepth();})(); // => 4
相关文章:
- 为什么我的JavaScript堆栈排序函数不起作用
- 如何远程检查JavaScript应用程序的函数调用堆栈
- 打印javascript控制台的堆栈跟踪
- 当一个变量被传递给一个函数时,JavaScript堆栈会发生什么
- 如何在Internet Explorer中获取javascript堆栈跟踪.e.stack 返回 “Undefined”
- 绘制图像时JavaScript堆栈溢出
- Javascript 堆栈和递归调用
- 如何在 Firefox 中获取 JavaScript 堆栈跟踪
- Laravel 5外部JavaScript文件_ JavaScript堆栈
- Java堆栈上的Cassandra与JavaScript堆栈上的Mongo-Db
- 当脚本代码更改文本时,返回输入的javascript堆栈跟踪
- 我如何采取一个缩小的javascript堆栈跟踪,并运行它对源映射,以获得适当的错误
- 我如何导航到原始的TypeScript文件从JavaScript堆栈在WebStorm与Node
- 如何从Nashorn获得JavaScript堆栈跟踪?
- Javascript堆栈错误
- 如何在Firefox中获得错误的JavaScript堆栈跟踪?
- 端到端javascript堆栈安全吗?
- 打开一个新的选项卡会丢失本地存储中的arraylist javascript堆栈溢出
- Javascript堆栈值显示
- 为什么不是't在jquery函数中正确更新Javascript堆栈