【问题标题】:+ operator in a ternary operator+ 运算符中的三元运算符
【发布时间】:2013-09-14 17:58:29
【问题描述】:

我正在阅读 John Resig 的 JavaScript Ninja 的秘密,但我无法理解三元运算符在此递归函数中的工作原理:

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

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

【问题讨论】:

  • signal(n-1) 必须在其值与'-chrip' 连接之前进行评估。你问的是这个吗?

标签: javascript recursion


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    加上一些括号,阅读起来可能会更清楚:

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

    或作为普通的if 子句:

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

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

    【讨论】:

      最近更新 更多