Javascriptの矢印関数
MDNによると、矢印関数式は、通常の関数式の構文的にコンパクトな代替手段ですが、this、arguments、super、またはnew.targetキーワードへの独自のバインディングはありません。矢印関数式はメソッドとしては不適切であり、コンストラクターとして使用することはできません。
JavaScriptの通常の関数と矢印関数には3つの微妙な違いがあります。
-
このバインディングを所有していません
矢印関数には独自の値はありません。矢印関数内のこの値は、常に囲んでいるスコープから継承されます。
例
this.a = 100; let arrowFunc = () => {this.a = 150}; function regFunc() { this.a = 200; } console.log(this.a) arrowFunc() console.log(this.a) regFunc() console.log(this.a)
出力
これにより、出力が得られます-
100 150 150
矢印関数がこのオブジェクトをスコープ外に変更したことを確認してください。通常の関数は、それ自体の中で変更を加えただけです。
- 矢印関数には引数配列がありませんJSの引数配列関数の配列は、関数に渡されるすべての引数を取得するために使用できる特別なオブジェクトです。これと同様に、矢印関数には引数オブジェクトへの独自のバインドはなく、スコープを囲む引数にバインドされます。
- 矢印関数は呼び出し可能ですが、構築可能ではありません関数が構築可能である場合、new、つまりnew User()で呼び出すことができます。関数が呼び出し可能である場合、それは新規なしで呼び出すことができます(つまり、通常の関数呼び出し)。
関数宣言/式によって作成された関数は、構築可能であり、呼び出し可能です。
矢印関数(およびメソッド)は呼び出し可能です。クラスコンストラクターは構築可能です。
呼び出し不可能な関数を呼び出そうとしたり、非構築的な関数を作成しようとすると、ランタイムエラーが発生します。
例
let arrowFunc = () => {} new arrowFunc()
出力
このコードはエラーを出します-
arrowFunc is not a constructor
-
JavaScriptの太い矢印関数
太い矢印関数の構文は次のようになります- (param1,param2,..)=>{ } しかありません。 以下は、JavaScriptでファットアロー関数を実装するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&
-
JavaScriptのファーストクラス関数
JavaScriptは関数をオブジェクトとして扱い、関数をパラメーターとして別の関数に渡したり、他の関数から関数を返したりすることもできます。 JavaScriptでは、関数はファーストクラスの関数です。つまり、変数、オブジェクト、配列に格納できます。高階関数は、関数を取得するか、関数を返すか、またはその両方を実行できます。 以下は、JavaScriptでファーストクラス関数を実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT