使用三元运算符和递归连接字符串

Fri*_*tzl 3 javascript recursion ternary

我试着理解这个.这是来自John Resig的高级JavaScript的一个例子.

function yell(n) {
    return n > 0 ? yell(n-1) + "a" : "hiy";
}
alert( yell(4) );
Run Code Online (Sandbox Code Playgroud)

作为初学者,我会以某种方式使用临时变量来保存字符串并将其连接到最后一个字(这里是hiyaaaa).

我无法理解这个高级示例是如何工作的.连接发生的地方和方式如何?如果最后添加的话,为什么在"a"之前的"hiy"呢?

Aus*_*rst 6

这是递归.该临时变量是调用的返回值yell.yell自称为自己n <= 0.理解这一点的最简单方法可能是直观地写出将要进行的一系列调用yell.

yell(4) == yell(3) + "a"
yell(3) == yell(2) + "a"
yell(2) == yell(1) + "a"
yell(1) == yell(0) + "a"
yell(0) == "hiy"
Run Code Online (Sandbox Code Playgroud)

替换值,您将获得最终值yell(4).

条件运算符是表达一个条件语句有两个情况下都是一个简洁的方式.通过使用expand if语句替换运算符的这种用法,可能更容易概念化.

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

    return "hiy";
}
Run Code Online (Sandbox Code Playgroud)