这两个函数如何等价?
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) }
这里我们定义了一个函数x
。 x
的目的是接受参数 arg
并调用 y(arg)
。但是,如果我们有 y
,我们已经有调用 y(arg)
的方法,并且我们有 arg
: 通过简单地调用 y(arg)
。我们不需要为此目的引入新函数x
。
值得注意的是,您问题中的两行仅在 ajaxCall
使用一个参数调用其回调时才等效。为了使它们真正相等,第一行需要转发所有参数:
ajaxCall(...json => callback(...json));
我正在读一本书《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) }
这里我们定义了一个函数x
。 x
的目的是接受参数 arg
并调用 y(arg)
。但是,如果我们有 y
,我们已经有调用 y(arg)
的方法,并且我们有 arg
: 通过简单地调用 y(arg)
。我们不需要为此目的引入新函数x
。
值得注意的是,您问题中的两行仅在 ajaxCall
使用一个参数调用其回调时才等效。为了使它们真正相等,第一行需要转发所有参数:
ajaxCall(...json => callback(...json));