矢印関数と太い矢印関数の両方の名前についてインターネットで見つけましたが、それらの違いについての情報はありません。
違いはありますか?
そのような質問には少し説明が必要です...
ES5仕様では、矢印関数はまったくありませんでした。その後、次のような従来の関数式を使用するのが一般的でした。
// Example n°1
var myFunction = function () {
return 'Hello!';
};
// Example n°2
var obj = {
myFunction: function () {
return 'Hello!';
}
};
// Example n°3
var arr = ['foo', 'bar'];
arr.map(function (item) {
return 'Hello, ' + item + '!';
};
CoffeeScriptがJeremyAshkenasによって導入されたとき、それは新しい用語、特に細い矢印関数(->
)および太い矢印関数(=>
)。
一方では、細い矢印関数は、ES5(匿名)関数式と同等のCoffeeScriptです。 CoffeeScriptでは、前の例を次のように書くことができます。
# Example n°1
myFunction = -> 'Hello!'
# Example n°2
obj =
myFunction: -> 'Hello!'
# Example n°3
arr = ['foo', 'bar']
arr.map((item) -> "Hello, #{item}!")
一方、太い矢印関数は、ES5に同等の構文がないCoffeeScriptによって提供されるNiceユーティリティです。その目的は、特にコールバックで外側のthisを保持したい場合に、字句スコープをより簡単に操作することです。 CoffeeScriptと伝説的なjQueryコールバックを使った普遍的な例を見てみましょう。私たちがグローバルスコープにいると仮定します:
// Here "this" is "window"
console.log(this);
$(document).ready(function () {
// Here "this" is "document"
console.log(this);
});
コールバックで外側の「this」を操作する場合は、ES5コードを次に示します。
var that = this;
$(document).ready(function () {
console.log(that);
});
CoffeeScriptでは、代わりに太い矢印関数を使用できます。
// "this" is "window"!
$(document).ready => console.log this
もちろん、細い矢印関数では機能しません:
// "this" is "document"
$(document).ready -> console.log this
ES2015仕様が導入されました矢印関数。これらは、CoffeeScriptの太い矢印関数の代替です。ただし、ES6には細い矢印関数がないため、CoffeeScriptを使用しない場合に太い矢印関数について説明する理由はありません。 ES6では、次のようにします。
// Here "this" is "window"
$(document).ready(() => console.log(this));
字句スコープの通常の動作を維持したい場合は、ES5構文を使用してください。
$(document).ready(function () {
// Here "this" is "document"
console.log(this);
});
違いはありますか?
番号
「ファットアロー機能」という用語が廃止され、廃止されたことを除いて。
誰かがまだそれを使用している場合、この答えはCoffeeScriptには適用されません。
CoffeeScriptでは、太い矢印関数はカプセル化スコープを通過しますが、通常の矢印は通過しません。