首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript --来自John Resig`s的学习高级JavaScript的示例#10

JavaScript --来自John Resig`s的学习高级JavaScript的示例#10
EN

Stack Overflow用户
提问于 2011-03-17 08:41:11
回答 4查看 628关注 0票数 1

我在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)。

如你所见,我完全被弄糊涂了。

代码语言:javascript
复制
function yell(n){
  return n > 0 ? yell(n-1) + "a" : "hiy";
}
assert( yell(4) == "hiyaaaa", "Calling the function by itself comes naturally." );
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-17 08:47:40

a)这个函数利用了递归,所以是的,这个函数再次被调用,所有其他的东西都被推入堆栈,等待返回值。b)否,如上所述,使用返回值调用函数。c)见上文。d)事实并非如此。

你可以这样想:

代码语言:javascript
复制
function a(val) {
  return val + "a";
}

function b(val) {
  return a(val) + "a";
}

如果你叫b("hiya"),你会得到hiyaaa。现在,不是调用不同的函数,而是调用相同的函数。

票数 1
EN

Stack Overflow用户

发布于 2011-03-17 08:45:36

a)是的,它再次调用该函数,因此该函数是递归的。

b)如果其中一个操作数是字符串,则+进行字符串连接。

c)它返回它。

d)将递归写在纸上,以便更好地可视化。

票数 1
EN

Stack Overflow用户

发布于 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),请查看其余部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5333513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档