函数返回函数

Function returning a Function?

本文关键字:函数 返回      更新时间:2023-09-26

我正在学习Javascript,并试图弄清楚这个Sa() function在这个代码示例中的作用。

我以为它是小林丸,经过进一步检查,我相信这个Sa() function返回了其他功能以及它自己。我接近了吗?

如果是这样的话,那会有什么结果呢?

var Jj, Ss, Sa;
Ss = function(n) {
  return n + 1;
};
Jj = function(f, n) {
  return function(i) {
  if (n < 1) {
  return i;
} else {
  return f(Jj(f, n - 1)(i));
  }
 };
};
Sa = function(a, b) {
  return Jj(Jj(Ss, a), b)(0);
};

@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