我正在使用一个第三方库,它有一个接受函数作为参数的函数。我正在进行一些条件检查,以决定是否将特定函数作为参数添加,但在某些情况下我不想提供函数。在这些情况下提供null会导致错误。
我发现了这段代码,它能正常运行,但我并不完全理解其中的原理。
compose(__DEV__ ? devTools() : f => f)
f => f
是否等同于() => {}
一个空的匿名函数?
我正在使用一个第三方库,它有一个接受函数作为参数的函数。我正在进行一些条件检查,以决定是否将特定函数作为参数添加,但在某些情况下我不想提供函数。在这些情况下提供null会导致错误。
我发现了这段代码,它能正常运行,但我并不完全理解其中的原理。
compose(__DEV__ ? devTools() : f => f)
f => f
是否等同于() => {}
一个空的匿名函数?
f => f
是恒等函数,它仅会返回传入的参数。
由于它不执行任何转换操作,因此该函数通常用作转换过程的默认值。
f => f
和() => {}
一个空匿名函数等价吗?
不是。空函数没有返回值,而恒等函数返回传入的参数。
f => f
类似于function(f){ return f; }
很接近,但并不完全符合您的期望。
* - 如评论中所指出,存在细微差别,但为了回答您的问题,我认为它们不是特别相关的。 在其他情况下,它们非常相关。
f => f
和 function(f) { return f; }
之间的两个不同之处 :) - Benjamin Gruenbaumnew (f => f)
会抛出异常,它具有不同的 toString
,但由于某种我无法理解的原因,(f => f).arguments
在 Chrome 中会抛出异常,而在 Firefox 或 Edge 中则不会。 - Benjamin Gruenbaumthis
的方式也有所不同(尽管如果函数体中没有出现 this
的话,这种差异可能无法观察到……我不确定)。 - Greg Nisbetcaller
/arguments
属性,而在Function.prototype上的那些属性(参见CreateIntrinsics)被定义为在访问时抛出异常。也许2016年的情况不太精确? - SamBf => f
的含义,左边是参数,右边是返回值。例如,f => f*2
等同于:
如果您想了解 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__
是否为真值,如果是,则返回函数devTools()
,否则返回什么也不做的标识函数f => f
。换句话说:这段代码启用了一些开发模式函数。没有剩余的代码,很难确定此模式增加了什么,但可能会启用一些额外的日志信息和更少的混淆。
__DEV__ ? devTools() : f => f
不会给 f
赋值。你在代码示例中漏掉了什么吗? - Felix Kling
f
的对象字面量。 - Eli Sadoff