我在m reading John Resig的“学习高级JavaScript”http://ejohn.org/apps/learn/#10中遇到了下面这个我不理解的函数。
使用参数4调用函数yell。完成后,参数4将通过三元运算符运行。如果它大于零,那么我们就来yell(n-1) + a,我的问题与此相关。
a) yell(n-1) + a是否使用参数3再次调用该函数(即重新启动它)。
b)如果你做(n-1) + a,,你会得到3a的结果。JavaScript是否将3a转换为"aaa“。我之所以这样问,是因为断言行中显示为yell(4) == "hiyaaaa"
c)转换后,是否以某种方式将其添加到"hiy"?我不明白是怎么回事。
d)如果JavaScript确实将3a转换为一串“aaa”,并设法将其添加到"hiy“中,我就不明白为什么JavaScript(4)=hiyaaaa。Yell(n-1) +a= hiyaaa (3as),而不是hiyaaaa(4"a"s)。
如你所见,我完全被弄糊涂了。
function yell(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
assert( yell(4) == "hiyaaaa", "Calling the function by itself comes naturally." );发布于 2011-03-17 08:47:40
a)这个函数利用了递归,所以是的,这个函数再次被调用,所有其他的东西都被推入堆栈,等待返回值。b)否,如上所述,使用返回值调用函数。c)见上文。d)事实并非如此。
你可以这样想:
function a(val) {
return val + "a";
}
function b(val) {
return a(val) + "a";
}如果你叫b("hiya"),你会得到hiyaaa。现在,不是调用不同的函数,而是调用相同的函数。
发布于 2011-03-17 08:45:36
a)是的,它再次调用该函数,因此该函数是递归的。
b)如果其中一个操作数是字符串,则+进行字符串连接。
c)它返回它。
d)将递归写在纸上,以便更好地可视化。
发布于 2011-03-17 08:47:21
对于a),它被称为递归函数,是的,它使用3调用self。
对于b),你不仅仅是做(n-1),你是在做yell(n-1) + "a",一旦n = 0,yell(0)返回0。
对于c),阅读b)的最后部分,即由于三元语句,一旦n=0,它将返回"hiy“。
对于d),请查看其余部分。
https://stackoverflow.com/questions/5333513
复制相似问题