JavaScript 从递归调用函数中获取调用堆栈参数
我想知道,如果函数被递归调用,如何获取函数堆栈调用的参数? 如果我有一个正常的函数,每个函数都调用另一个函数,那么它就可以工作。但如果我想得到 来自递归堆栈的堆栈,我总是得到最后传递的参数。
function a(p1, p2) {
b(p1, p2, 3)
}
function b(p1, p2, p3) {
c(p1, p2, p3, 4)
}
function c(p1, p2, p3, p4) {
console.log(arguments.callee.caller.caller);
}
a(1, 2)
在这种情况下我总是会得到相同的结果:
var i = 3;
function a(p1, p2) {
var args = Array.prototype.slice.apply(arguments);
args.push(i);
while (--i > 0) {
arguments.callee.apply(arguments.callee, args);
}
if (i === 0) {
console.log(arguments.callee.caller.caller.caller.caller);
}
}
a(1, 2);
I wonder, how to get function stack called arguments if function was called as recursive?
If I have a normal functions that each calls another one, it works. But if I'm trying to get
a stack from recursive one, I always get the last passed arguments.
function a(p1, p2) {
b(p1, p2, 3)
}
function b(p1, p2, p3) {
c(p1, p2, p3, 4)
}
function c(p1, p2, p3, p4) {
console.log(arguments.callee.caller.caller);
}
a(1, 2)
in this case I'll get always the same result:
var i = 3;
function a(p1, p2) {
var args = Array.prototype.slice.apply(arguments);
args.push(i);
while (--i > 0) {
arguments.callee.apply(arguments.callee, args);
}
if (i === 0) {
console.log(arguments.callee.caller.caller.caller.caller);
}
}
a(1, 2);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
argument.callee == 当前调用的函数,
该函数的调用者始终指向调用者函数本身,
因此,在递归函数中,您的调用者不会回溯到顶部,而是始终指向同一个函数,例如,
这将导致 20 次
console.log
。目前我找不到解决这个问题的方法 - 我个人认为这是 javascript 的错误设计。
arguments.callee == the function current called,
the caller of this function always points to the caller function itself,
so in recursive functions your caller won't track back to the top but always point to the same function, e.g.
this will result in 20 times
console.log
.Currently I can not find a way to solve this - personally I consider it a mis-design in javascript.