我试图绕过递归函数,我不理解输出(这个例子来自John Resig' Javascript Ninja'书):
var ninja = {
chirp: function chirp(n) {
return (n > 1) ? chirp(n-1) + "-chirp"+n : "chirp"+n;
}
}
$('#hello').html(ninja.chirp(8));
和输出:
chirp1-chirp2-chirp3-chirp4-chirp5-chirp6-chirp7-chirp8
为什么n
的输出增加而不是减少?在我看来,输出将从8而不是从1开始倒数。
答案 0 :(得分:2)
如果您致电chirp(1)
,结果将为"chirp1"
。
如果您致电chirp(2)
,结果将为chirp(1) + "-chirp2"
,即"chirp1-chirp2"
。
如果您致电chirp(3)
,结果将为chirp(2) + "-chirp3"
,即"chirp1-chirp2-chirp3"
。
如您所见,该函数调用自身获取较低数字的输出,并最后添加最高数字。
答案 1 :(得分:1)
它从8开始倒计时,但输出会附加到字符串的开头,然后你从左到右读取输出。
如果您看到正在构建的输出,它将如下所示:
-chirp8
-chirp7-chirp8
-chirp6-chirp7-chirp8
...
chirp1-chirp2-chirp3-chirp4-chirp5-chirp6-chirp7-chirp8
由于您只看到最终输出,因此它会按升序显示。