我的问题是此函数的工作方式,我不理解的是返回部分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是一个递归函数。当您使用4调用它时,只要n> 0,它就会使用3(4-1)进行调用,而3则使用2(3-1)进行调用。

可以通过这种方式调用yell的原因是,编写代码的人编写了一个命名函数表达式:

yell: function yell(n){
  return n > 0 ? yell(n-1) + "a" : "hiy";
}


所要做的就是创建一个名称为yell的函数,并将其分配给对象yell上的属性ninja。该属性和函数恰好具有相同的名称,但是没有必要,它们可能是:

yell: function foo(n){
  return n > 0 ? foo(n-1) + "a" : "hiy";
}


yell(非限定符号),或者在我上面的示例中的foo,在函数范围内,因为它是函数的名称。

这里值得一提的是,命名函数表达式在IE8及更早版本上无法正常工作(尽管该特定示例仍然可以工作);更多:Double take

10-04 16:47