我正在阅读John Resig的 JavaScript Ninja的秘密,我在理解三元运算符在这个递归函数中的工作方式时遇到了一些麻烦:
var ninja = {
chirp: function signal(n) {
return n > 1 ? signal(n - 1) + '-chirp' : 'chirp';
}
};
+
运营商如何在这里工作?我理解它是连接返回的字符串,但signal(n - 1)
如何不干扰它?乍一看,它似乎将字符串附加到函数调用。
答案 0 :(得分:4)
+
运算符将-chirp
附加到函数调用的结果。 signal
是一个递归函数 - 一个自我调用的函数。
答案 1 :(得分:2)
添加了一些括号后,可能会更清楚地阅读:
return (n > 1) ? (signal(n - 1) + '-chirp') : ('chirp');
或作为普通if
条款:
if( n > 1 ) {
return signal(n - 1) + '-chirp';
} else {
return 'chirp';
}
实际上,字符串-chirp
与递归调用signal()
的结果连接在一起。