javascript - 这个功能如何运作?

标签 javascript

我的问题是这个函数是如何工作的,我不明白的是返回部分yell(n-1) + "a"我期望的结果是3a 但结果是hiyaaaa。我不知道怎么办。

函数代码

var ninja = { 
  yell: function yell(n){ 
    return n > 0 ? yell(n-1) + "a" : "hiy"; 
  } 
};
ninja.yell(4); //returns hiyaaaa

最佳答案

yell(n-1)+"a" 使用略低的 n 值再次调用该函数,并附加一个 a无论递归调用返回什么。在这种情况下,你会得到这个链:

ninja.yell(4)
yell(3)+"a"
(yell(2)+"a")+"a"
((yell(1)+"a")+"a")+"a"
(((yell(0)+"a")+"a")+"a")+"a"
((("hiy"+"a")+"a")+"a")+"a"
"hiyaaaa"

不过,我个人会像这样重写该函数:

ninja = {
    yell: function(n) {return "hiy"+new Array(n+1).join("a");}
};

关于javascript - 这个功能如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15719975/

相关文章:

javascript - 可以在不使用 RTSP 的情况下流式传输实时视频吗?

javascript - 寻找路径避免软碰撞

javascript - 停止 ASP.NET 表单(单选按钮列表)内的回发 - 返回 false 且 PreventDefault 不起作用

javascript - 没有从多选列表框中的选定值中获取id Angular JS

javascript - jquery中的多按键功能?

c# - Knockout js , mvc 下拉默认值不选择

javascript - 页脚居中 div

输入 ID 的 Javascript 验证

javascript - 从 addEventListener 调用函数

javascript - 使用循环创建任务 [gulp]