我正在使用第三方库,它具有将函数作为参数的函数。我正在做一些条件检查来决定是否将特定函数添加为参数,在某些情况下我不想提供函数。在这种情况下提供null会引发错误。
我发现这个代码有效,但我不完全了解发生了什么。
compose(__DEV__ ? devTools() : f => f)
f => f
是否等同于() => {}
一个空的匿名函数?
答案 0 :(得分:180)
f => f
是identity function。它只返回传入的参数。
此函数通常用作转换过程的默认值,因为它不执行任何转换。
f => f
是否等同于() => {}
一个空的匿名函数?
没有。空函数不返回任何内容。 identity函数返回传入的参数。
答案 1 :(得分:112)
f => f
与function(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 => f
和f => 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() {};