匿名JavaScript函数究竟是什么f => f呢?

时间:2016-12-20 15:45:34

标签: javascript lambda ecmascript-6

我正在使用第三方库,它具有将函数作为参数的函数。我正在做一些条件检查来决定是否将特定函数添加为参数,在某些情况下我不想提供函数。在这种情况下提供null会引发错误。

我发现这个代码有效,但我不完全了解发生了什么。

compose(__DEV__ ? devTools() : f => f)

f => f是否等同于() => {}一个空的匿名函数?

5 个答案:

答案 0 :(得分:180)

f => fidentity function。它只返回传入的参数。

此函数通常用作转换过程的默认值,因为它不执行任何转换。

  

f => f是否等同于() => {}一个空的匿名函数?

没有。空函数不返回任何内容。 identity函数返回传入的参数。

答案 1 :(得分:112)

f => ffunction(f){ return f; }

类似*

如此接近,但并不完全符合您的预期。

* - 正如评论中指出的那样,存在细微差别,但为了您的问题,我不认为它们与特别相关。它们在其他情况下非常相关。

答案 2 :(得分:19)

如果您想知道f => f的含义,左侧是参数,右侧是返回值。例如,f => f*2等同于:

function(f) { 
  return f * 2; 
}

您描述的代码会返回作为输入提供给它的任何内容。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

答案 3 :(得分:9)

其他人已经提到了 <nav class="navbar navbar-default lumenisInnerMenu"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="collapse navbar-collapse lumenisListItems" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> [*>NODE] </ul> </div> </div> </nav> [>NODE] <li class="[?SELECTED]dir current[/?][?NODE]HasChildren child[=DEPTH] dropdownmenu [/?]"> [?ENABLED] <a [?!NODE] href="[=URL]" [/?] [?TARGET]target="[=TARGET]"[/?] class="[?NODE]dropdown-toggle[/?]" data-toggle="collapse" data-target="#[=ID]"> <div class="textsubitem"> <span>[=TEXT]</span> </div> </a> [?ELSE] <a href="#" [?NODE] [/?]> [?NODE] <span>[=TEXT]</span>[/?] </a> [/?] [?NODE] <ul class="dropdown-menu dropdown[=DEPTH]" id="[=ID]"> [*>NODE] </ul> [/?] </li> [/>] 所做的事情,所以我不打算深入研究。{1}}。我只是要解释函数的其余部分,因为f => ff => f

之间存在一些区别

三元运算符检查__DEV__ ? devTools() : f => f是否为真值,如果是,则返回函数__DEV__。否则,它返回不执行任何操作的标识函数devTools()。换句话说:此代码启用了一些开发模式功能。如果没有剩下的代码,很难说出这种模式会增加什么,但可能会增加一些额外的日志记录信息并减少混淆。

答案 4 :(得分:9)

任何时候遇到类似的困境,你都可以使用Babel来获得答案。

它像这样返回:

"use strict";

(function (f) {
  return f;
});

BTW, =&gt; 您使用的是名为arrow expression的ES6功能。 另一种感兴趣的表达

() => {};  // es6

会转换为:

(function () {});

由于箭头函数表达式始终是匿名,因此如果将名称添加到函数中,则有意义:

let empty = () => {}; // es6

会转换为

var empty = function empty() {};