var x = {
y: function(n){
console.log(n);
console.log(n+":"+(n > 0 ? arguments.callee(n-1) + "o" : "all"));
}
};
x.y(4)
控制台日志:
4
3
2
1
0
0 -> all
1 -> o
2 -> o
3 -> o
4 -> o
中的console.log的第一部分对我来说很有意义,我们已经开始在n = 4,并用n-1调用函数本身,结束了4,3,2,1,0。
然而, 的
console.log(n+":"+(n > 0 ? arguments.callee(n-1) + "o" : "all"));
的输出是比特刺激性,因为它返回结果的“颠倒”的顺序。 为什么n的值作为该执行的第一部分,在没有arguments.callee的情况下给出的结果不同于使用arguments.callee从三元运算符中调用它的结果? 这是一个纯粹的定义问题还是有另一个逻辑原因呢?
The process would be as the following:
(n=4) = (4 > 0 ? arguments.callee(3) + "o" : "all") = "o"
(n=3) = (3 > 0 ? arguments.callee(2) + "o" : "all") = "o"
(n=2) = (2 > 0 ? arguments.callee(1) + "o" : "all") = "o"
(n=1) = (1 > 0 ? arguments.callee(1) + "o" : "all") = "o"
(n=0) = (0 > 0 ? arguments.callee(1) + "o" : "all") = "all"
这不是必须最终在ooooall而不是alloooo?
干杯
咦? *“为什么n的值作为执行的第一部分......”*因为...这就是代码的作用。这里真正的问题是什么?注意'console.log(n)'在另一个'console.log'之前。 –
这些?都是为了表达每个问题。谢谢。 – F4b
这个职位还有助于解决这个问题: [尾递归] [1] [1]:http://stackoverflow.com/questions/33923/what-is-tail-recursion – F4b