web-dev-qa-db-ja.com

ES6に細い矢印の機能がないのはなぜですか?

ES6にfat-arrow関数(_=>_)が追加されました。これらは通常の関数と2つの大きな違いがあります。

  • 短い構文(単一式の本体を使用する場合の暗黙の戻りを含む)
  • 周囲のスコープからthisを継承

これらはどちらも非常に便利な機能ですが、私はそれらの価値と用途が完全に分かれているように見えます。時には、どちらか一方、または両方、あるいは両方が必要な場合もあります。短い構文の関数を使用したい場合、this- modifying動作も使用するhaveのは奇妙に思われます。およびその逆。これら2つの機能が言語への単一の追加として実装されている理由はわかりません。

暗黙的な戻り値と簡潔さのために短い構文関数を使用したい場合(完全なfunction (..) { return ...}の方が少し読みにくいコンテキストでは)が、thisを使用したい場合呼び出しコンテキストを参照する関数?これを行う方法はありません。

CoffeeScriptには_->_および_=>_スタイル関数があり、ES6はそこから_=>_スタイルを借用したようです。だから私の質問は、なぜES6は_->_スタイルも借りなかったのですか?

16
callum

矢印関数を追加するための提案を参照してください: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax1

それが言うことは:

ただし、CoffeeScriptは必要ありません->、2つの矢印があり、動的なこのバインディングが発砲の多いフットガンであると混乱します。

->構文も含まれていた以前のバージョンの提案の議論も見ることができます: https://esdiscuss.org/topic/arrow-function-syntax-simplified

次のようになります。

  1. 微妙に異なるセマンティクスを持つ2つの矢印構文があると、複雑さと混乱が増大します。
  2. Function()と->の動的なこのバインディングは、ほとんど役に立ちませんでした。
  3. 本当にこの動的バインディングが必要な場合でも、function()を使用できます。ショートカット構文を持つことはあまり役に立ちませんでした。
25
Winston Ewert