Som*_*gOn 100 javascript lambda ecmascript-6
我正在使用第三方库,它具有将函数作为参数的函数.我正在做一些条件检查来决定是否将特定函数添加为参数,在某些情况下我不想提供函数.在这种情况下提供null会引发错误.
我发现这个代码有效,但我不完全理解发生了什么.
compose(__DEV__ ? devTools() : f => f)
Run Code Online (Sandbox Code Playgroud)
是f => f
相当于() => {}
一个空的匿名函数?
Jam*_*iec 113
f => f
类似于 function(f){ return f; }
如此接近,但并不完全符合您的预期.
* - 正如评论中指出的那样,存在细微差别,但为了您的问题,我认为它们并不特别相关.它们在其他情况下非常相关.
Yat*_*thi 19
如果你想知道什么f => f
意思,左边是参数,右边是返回值.例如,f => f*2
相当于:
function(f) {
return f * 2;
}
Run Code Online (Sandbox Code Playgroud)
您描述的代码返回作为输入提供给它的任何内容.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
其他人已经提到了什么f => f
,所以我不打算深入研究.我只是要解释函数的其余部分,因为f => f
和之间有一些区别__DEV__ ? devTools() : f => f
三元运算符检查是否__DEV__
为真值,如果是,则返回函数devTools()
.否则,它返回无效的标识功能f => f
.换句话说:此代码启用了一些开发模式功能.如果没有剩下的代码,很难分辨出这种模式会增加什么,但可能会增加一些额外的日志记录信息并减少混淆.
任何时候都有类似的困境,你可以用Babel来得到答案.
它像这样返回:
"use strict";
(function (f) {
return f;
});
Run Code Online (Sandbox Code Playgroud)
BTW,=>你使用的是ES6功能,称为箭头表达式.另一种感兴趣的表达方式
() => {}; // es6
Run Code Online (Sandbox Code Playgroud)
将转换为:
(function () {});
Run Code Online (Sandbox Code Playgroud)
由于箭头函数表达式始终是匿名的,因此将名称添加到函数中是有意义的:
let empty = () => {}; // es6
Run Code Online (Sandbox Code Playgroud)
将转换为
var empty = function empty() {};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24723 次 |
最近记录: |