1

我正在阅读 John Resig 的JavaScript Ninja 的秘密,但在理解三元运算符在此递归函数中的工作方式时遇到了一些麻烦:

var  ninja = {
  chirp: function signal(n) {
    return n > 1 ? signal(n - 1) + '-chirp' : 'chirp';
  }
};

+操作员在这里工作怎么样?我知道它正在连接返回的字符串,但是如何signal(n - 1)不干扰它呢?乍一看,它似乎将字符串附加到函数调用中。

4

2 回答 2

4

+运算符附加-chirp到函数调用的结果signal是一个递归函数 - 一个调用自身的函数。

于 2013-09-14T18:00:05.293 回答
2

添加一些括号后,阅读起来可能会更清晰:

return (n > 1) ? (signal(n - 1) + '-chirp') : ('chirp');

或作为一个简单的if子句:

if( n > 1 ) {
  return signal(n - 1) + '-chirp';
} else {
  return 'chirp';
}

所以实际上字符串-chirp与递归调用的结果连接在一起signal()

于 2013-09-14T18:00:34.287 回答