web-dev-qa-db-ja.com

匿名JavaScript関数f => fは正確に何をしますか?

引数として関数を受け取る関数を持つサードパーティライブラリを使用しています。特定の関数をパラメーターとして追加するかどうかを決定するために、いくつかの条件付きチェックを行っていますが、関数を提供したくない場合もあります。その場合にnullを指定すると、エラーがスローされます。

動作するこのコードを見つけましたが、何が起きているのか完全にはわかりません。

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

f => f() => {}と同等ですか?空の匿名関数ですか?

99
SomethingOn

f => ffunction(f){ return f; }に似ています*

とても近いですが、あなたが期待したほどではありません。

*-コメントで指摘されているように、微妙な違いがありますが、あなたの質問のために、それらは特にに関連するとは思いません。それらは他の状況に非常に関連しています。

112
Jamiec

f => fidentity関数 です。渡された引数を返すだけです。

この関数は、変換を実行しないため、変換プロセスのデフォルト値としてよく使用されます。

f => f() => {}と同等ですか?空の匿名関数ですか?

いいえ。空の関数は何も返しません。識別関数は、渡された引数を返します。

181
Felix Kling

f => fの意味を知りたい場合は、左側がパラメーターで、右側が戻り値です。たとえば、f => f*2は次と同等です。

function(f) { 
  return f * 2; 
}

記述したコードは、入力として提供されたものをすべて返します。

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

19
Yathi

同様のジレンマがある場合は、 Babel を使用して答えを得ることができます。

次のように返されました。

"use strict";

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

ところで、=>使用したES6機能は 矢印式 です。興味のある他の表現

() => {};  // es6

に変換されます:

(function () {});

矢印関数式は常にanonymousなので、関数に名前を追加すると意味があります。

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

に変換します

var empty = function empty() {}; 
9
prosti

f => fが何をするかについては既に言及しているので、これ以上深くは述べません。 f => f__DEV__ ? devTools() : f => fには少し違いがあるので、関数の残りの部分を説明するだけです。

三項演算子は、__DEV__が真の値であるかどうかをチェックし、そうである場合は、関数devTools()を返します。それ以外の場合は、何もしない識別関数f => fを返します。言い換えると、このコードはいくつかの開発モード機能を有効にします。残りのコードがないと、このモードが何を追加するのかを判断するのは困難ですが、おそらく、追加のロギング情報が有効になり、難読化が少なくなるでしょう。

9
Nzall