我正在使用一个具有将函数作为参数的函数的第三方库。我正在做一些条件检查,以决定是否将特定功能添加为参数,在某些情况下,我不想提供功能。在这种情况下提供null会引发错误。
我发现此代码有效,但我不完全了解发生了什么。
compose(__DEV__ ? devTools() : f => f)
是f => f
相当于() => {}
一个空的匿名函数?
我正在使用一个具有将函数作为参数的函数的第三方库。我正在做一些条件检查,以决定是否将特定功能添加为参数,在某些情况下,我不想提供功能。在这种情况下提供null会引发错误。
我发现此代码有效,但我不完全了解发生了什么。
compose(__DEV__ ? devTools() : f => f)
是f => f
相当于() => {}
一个空的匿名函数?
Answers:
f => f
类似于 function(f){ return f; }
如此接近,但与您期望的不尽相同。
*-正如评论中所指出的那样,存在细微的差异,但是出于您的问题,我认为它们之间没有特别的关系。它们在其他情况下非常相关。
f => f
和function(f) { return f; }
:)
new (f => f)
抛出,它有所不同toString
,由于某种原因,我不能完全理解(f => f).arguments
Chrome中的异常抛出,但不是FF或Edge。
this
方式也不同。(尽管如果this
不出现在函数体中,则可能无法观察到这种差异。。。我不确定)
如果您想知道什么f => f
意思,则左侧是参数,右侧是返回值。因此,例如,f => f*2
等效于:
function(f) {
return f * 2;
}
您描述的代码返回提供给它的任何内容作为输入。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
其他人已经提到了f => f
做什么,所以我将不做进一步的介绍。我将只解释其余的功能,因为f => f
和之间有一些区别__DEV__ ? devTools() : f => f
三元运算符检查是否__DEV__
为真值,如果是,则返回function devTools()
。否则,它返回f => f
不执行任何操作的身份函数。换句话说:此代码启用某些开发模式功能。如果没有剩余的代码,很难说出此模式会增加什么,但是据推测,它将启用一些额外的日志记录信息并减少混淆。
__DEV__ ? devTools() : f => f
不会为分配任何内容f
。您是否在代码示例中遗漏了一些内容?
f
根据MDN