匿名JavaScript函数f => f究竟做了什么?
我正在使用具有函数作为参数的函数的第三方库。 我正在做一些条件检查,以决定是否添加一个特定的函数作为参数,在某些情况下,我不想提供一个函数。 在这种情况下提供null会引发错误。
我发现这个代码有效,但是我不完全理解发生了什么。
compose(__DEV__ ? devTools() : f => f)
是f => f
相当于() => {}
是一个空的匿名函数吗?
f => f
类似于function(f){ return f; }
function(f){ return f; }
如此接近,但不是你所期望的。
* – 正如在评论中指出的,有微妙的差异,但为了您的问题,我不认为他们是特别相关的。 他们在其他情况下非常相关。
f => f
是身份函数 。 它只是返回传入的参数。
这个函数经常用作转换过程的默认值,因为它不执行任何转换。
是
f => f
相当于() => {}
是一个空的匿名函数吗?
没有。空函数不返回任何东西。 标识函数返回传入的参数。
如果你想知道f => f
是什么意思,左边是参数,右边是返回值。 例如, f => f*2
等价于:
function(f) { return f * 2; }
您所描述的代码将返回提供给它的任何input。
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
三元运算符检查__DEV__
是否为真值,如果是,则返回函数devTools()
。 否则,它将返回不执行任何操作的身份函数f => f
。 换句话说:这段代码启用了一些开发模式function。 没有剩余的代码,很难说这个模式增加了什么,但是大概它会启用一些额外的日志logging信息和较less的混淆。
任何时候都有类似的困境,你可以用Babel来得到答案。
它像这样返回:
"use strict"; (function (f) { return f; });
顺便说一下, =>你使用的是ES6function称为箭头expression式 。 另一个expression的兴趣
() => {}; // es6
会转换为:
(function () {});
由于箭头函数expression式总是匿名的,所以如果你把这个名字添加到函数中,这是有意义的:
let empty = () => {}; // es6
将转换为
var empty = function empty() {};