Var ++在JavaScript中的递归函数参数中导致RangeError

Cob*_*kal 1 javascript recursion

我在JavaScript中计算了一个简单的线性递归函数,它是一个数字的阶乘.

function factorialImproved(n) {

  function factorialIter(p, c, m) {
    if (c > m) {
      return p;
    } else {
      return factorialIter(c * p, c++, m); // RangeError: Maximum call stack size exceeded // ++c or c+1 is OK
    }
  }

  return (factorialIter(1, 1, n))
}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚为什么我得到RangeError c++而不是++c或者c+1.

lil*_*zek 6

(c++)评估为c.所以,你在呼唤factorialIter以相同的c每一次.

因此,c = 1不会大于m = n除非n < 1.

但是,(++c)评估为c+1.记住这条规则:

  • (++c):然后先增加c.
  • (c++):先c增加.

在我看来,你应该使用c+1.请勿使用c++++c除非您希望c稍后在该范围内使用.