我的问题是此函数的工作方式,我不理解的是返回部分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