这两个函数如何等价?

How these two functions are equivalent?

我正在读一本书《Mostly enough guide》,在有关第一个 Class 函数的章节中,我遇到了这个例子。有人可以给我解释一下吗?

表示下面两行相等

// ignorant
const getServerStuff = callback => ajaxCall(json => callback(json));

// enlightened
const getServerStuff = ajaxCall;

这就是两者等价的原因:

// this line
ajaxCall(json => callback(json));

// is the same as this line
ajaxCall(callback);

// so refactor getServerStuff
const getServerStuff = callback => ajaxCall(callback);

// ...which is equivalent to this
const getServerStuff = ajaxCall; // <-- look mum, no ()'s

但是这部分我看不懂。这两个如何等价?

// this line
ajaxCall(json => callback(json));

// is the same as this line
ajaxCall(callback);

有人能通俗地解释一下吗?

它们是等价的,因为第一行引入了一个匿名函数,该函数除了将其参数转发给 callback 和 return callback 的 return 值外什么都不做.

一般来说,一个函数 x 除了将其参数转发给其他函数 y 和 return 结果外什么都不做,可以用内部 y 函数。 x 没有做任何有意义的事情。

所以,给定一个函数 x...

function x(arg) { return y(arg) }

这里我们定义了一个函数xx 的目的是接受参数 arg 并调用 y(arg)。但是,如果我们有 y,我们已经有调用 y(arg) 的方法,并且我们有 arg 通过简单地调用 y(arg)。我们不需要为此目的引入新函数x


值得注意的是,您问题中的两行仅在 ajaxCall 使用一个参数调用其回调时才等效。为了使它们真正相等,第一行需要转发所有参数:

ajaxCall(...json => callback(...json));