0

我正在阅读一本书,主要是足够的指南,在关于 First 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);

有人可以用外行的方式解释吗?

4

1 回答 1

3

callback它们是等价的,因为第一行引入了一个匿名函数,除了将其参数转发给,并返回callback的返回值之外什么都不做。

一般来说,x除了将其参数转发给其他函数y并返回结果之外什么都不做的函数可以被内部y函数替换。x没有做任何有意义的事情。

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

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

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


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

ajaxCall(...json => callback(...json));
于 2019-05-08T04:53:44.483 回答