arrow functionの違い
5699 ワード
preface
今日はツイッターでarrow functionとreglar関数の比較を見ました.
関数の中のthis指向問題は、関数の呼び出しに関連しています.
arrow関数の違いをまとめました.
1.this指向問題
矢印関数の
2.this argments使用
矢印関数には
暗黙的なreturn文
矢印関数には1つの表式だけが含まれています.この表式の値を暗黙的に返します.
クラス内の矢印関数の
参考文献
文書
今日はツイッターでarrow functionとreglar関数の比較を見ました.
関数の中のthis指向問題は、関数の呼び出しに関連しています.
arrow関数の違いをまとめました.
1.this指向問題
矢印関数の
this
値は、this値がどこで実行されても、常に外部関数のthis
値に等しい.bind, apply, call
は矢印関数ではなく、this値を変更することはできません.2.this argments使用
矢印関数には
arguments
キーが定義されていません.矢印関数のarguments
はthis
値と同じです.外部関数のarguments
と同じです.function myRegularFunction() {
const myArrowFunction = () => {
console.log(arguments);
}
myArrowFunction('c', 'd');
}
myRegularFunction('a', 'b'); // logs { 0: 'a', 1: 'b' }
しかし、矢印関数のすべてのパラメータはthe rest parameters
方式でアクセスできます.function myRegularFunction() {
const myArrowFunction = (...args) => {
console.log(args);
}
myArrowFunction('c', 'd');
}
myRegularFunction('a', 'b'); // logs { 0: 'c', 1: 'd' }
3.return文暗黙的なreturn文
矢印関数には1つの表式だけが含まれています.この表式の値を暗黙的に返します.
const increment = (num) => num + 1;
increment(41); // => 42
Objectを返したら、次のように操作できます.const increment = (num) => ({ result: num + 1});
increment(41); // => {result: 42}
4.クラスでの使用クラス内の矢印関数の
this
は、語法的にクラスの例に結び付けられている.class Hero {
constructor(heroName, herAge) {
this.heroName = heroName;
this.heroAge = heroAge;
}
logName = () => {
console.log(this.heroName);
}
logAge() {
console.log(this.heroAge)
}
}
const batman = new Hero('Batman');
クラスの方法は、一般的な宣言と矢印関数の2つの方法を使用して、方法で呼び出されたときとは異なりませんが、矢印関数のthis指向はクラスのインスタンスに固定されています.参考文献
文書