这个功能如何运作?

mec*_*ous 0 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
Run Code Online (Sandbox Code Playgroud)

Nie*_*sol 6

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"
Run Code Online (Sandbox Code Playgroud)

虽然,我个人会改写这样的功能:

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