函数返回函数?

时间:2015-12-11 01:12:16

标签: javascript function

我正在学习Javascript并试图弄清楚这个Sa()函数在这个代码示例中的作用。 我认为这是一个Kobayashi Maru,经过进一步检查,我相信这个Sa()函数返回其他函数以及它自身。我接近了吗? 如果是这样的话,那将会取得什么成果? var Jj,Ss,Sa; Ss = function(n){   返回n + 1; }; Jj = function(f,n){   返回函数(i){   if(n< 1){   回归我; } else {   return f(Jj(f,n - 1)(i));   }  }; }; Sa =函数(a,b){   返回Jj(Jj(Ss,a),b)(0); };

1 个答案:

答案 0 :(得分:1)

正如@Bamar所注意到的那样,原始问题中似乎有一个拼写错误。 Jj(Sa, a)应为Jj(Ss, a)

通过此更改,Sa函数会返回ab的乘积,但会以非常迂回的方式计算它。

以下是记录状态信息的(固定)代码的修改版本:

var Jj, Ss, Sa;

Ss = function(n) {
  console.log("C:" + (n + 1)); 
  return n + 1;
};

Jj = function(f, nIterations) {
  return function(i) {
    if (nIterations < 1) {
      console.log('A' + nIterations + ":" + i); 
      return i;
    } else {
      console.log('B' + nIterations); 
      return f(Jj(f, nIterations - 1)(i));
    }
  };
};

Sa = function(a, b) {
  return Jj(Jj(Ss, a), b)(0);
};

以下是样本运行的输出:

> Sa(3,4)
B4
B3
B2
B1
A0:0
B3
B2
B1
A0:0
C:1
C:2
C:3
B3
B2
B1
A0:3
C:4
C:5
C:6
B3
B2
B1
A0:6
C:7
C:8
C:9
B3
B2
B1
A0:9
C:10
C:11
C:12
12