JavaScript の矢印関数と通常の関数の違いの詳細な説明

JavaScript の矢印関数と通常の関数の違いの詳細な説明

この記事では、JavaScriptにおけるアロー関数と通常の関数の違いについて解説します。具体的な内容は以下のとおりです。

矢印関数:

楽しみましょう = () => {
    console.log('ララララ');
}

通常の機能:

関数fun() {
    console.log('ララ');
}

矢印関数は匿名関数と同等であり、関数定義を簡素化します。矢印関数には 2 つの形式があります。1 つは、{...} と return が省略された 1 つの式のみを含む形式です。複数の文を記述できる型もあり、その場合は { ... } と return を省略することはできません。

矢印関数は匿名関数であり、コンストラクターとして使用したり、new と共に使用したりすることはできません。

FunConstructor = () => {
    コンソールログ('lll');
}

fc = new FunConstructor(); とします。

矢印関数は引数をバインドせず、代わりに残りパラメータを使用します...解決策

関数A(a){
  console.log(引数);
}
A(1,2,3,4,5,8); // [1, 2, 3, 4, 5, 8, 呼び出し先: ƒ, Symbol(Symbol.iterator): ƒ]


B = (b)=>{とする
  console.log(引数);
}
B(2,92,32,32); // キャッチされない ReferenceError: 引数が定義されていません


C = (...c) => {とする
  コンソールログ(c);
}
C(3,82,32,11323); // [3, 82, 32, 11323]

アロー関数はthisをバインドせず、それが配置されているコンテキストのthis値を自身のthis値として取得します。

var obj = {
  10,
  b: () => {
    console.log(this.a); // 未定義
    console.log(this); // ウィンドウ {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
  },
  c: 関数() {
    コンソールログ(this.a); // 10
    console.log(this); // {a: 10, b: ƒ, c: ƒ}
  }
}
obj.b(); 
オブジェクト
var obj = {
  10,
  b: 関数(){
    コンソールログ(this.a); //10
  },
  c: 関数() {
     戻り値 () =>{
           コンソールログ(this.a); //10
     }
  }
}
obj.b(); 
obj.c()();

矢印関数がcall()またはapply()メソッドを通じて関数を呼び出す場合、渡されるパラメーターは 1 つだけであり、 thisには影響しません。

obj2 = {
    10,
    b: 関数(n) {
        f = (n) => n + this.a とします。
        f(n) を返します。
    },
    c: 関数(n) {
        f = (n) => n + this.a とします。
        m = {とします
            答え: 20
        };
        f.call(m,n) を返します。
    }
};
コンソールログ(obj2.b(1)); // 11
コンソールログ(obj2.c(1)); // 11

アロー関数にはプロトタイププロパティがありません

var a = ()=>{
  1 を返します。
}

関数b(){
  2を返します。
}

console.log(a.prototype); // 未定義
console.log(b.prototype); // {コンストラクタ: ƒ}

矢印関数はジェネレーター関数として使用できず、yieldキーワードも使用できません。

要約する

  • 矢印関数のthisは常にそのコンテキストのthisを指しており、 call()bind()apply()などのメソッドは参照を変更できません。
  • 通常の関数の this は、それを呼び出すオブジェクトを参照します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • より良い JavaScript 条件文と一致条件を書くためのヒント (要約)
  • JSの矢印関数におけるこのポイントの詳細な説明
  • JavaScriptのアロー関数の特徴と通常の関数との違い
  • JS 矢印関数に適さないシナリオは何ですか?
  • JavaScript で矢印関数を使用できないシナリオはどれですか
  • JavaScript の条件付きアクセス属性と矢印関数の紹介

<<:  NexusはHTTPSプロトコルをサポートするためにnginxプロキシを使用します

>>:  VMware vCenter 6.7 のインストール プロセス (グラフィック チュートリアル)

推薦する

Vueフィルターの詳細な説明

<本文> <div id="ルート"> <h2&...

MySQLのインデックス設計の原則と一般的なインデックスの違いについて簡単に説明します。

インデックス定義: ディスク上に保存される個別のデータベース構造であり、データ テーブル内のすべての...

Vue v-for ループを書く 7 つの方法

目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...

Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します

目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...

MySQL 8.0.19 のインストールと設定方法のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.19のインストールと設定のグラフィックチュートリアルを記...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...

Vue の computed と watch の違いを分析する

目次1. 計算入門1.1、getとsetの使い方1.2. 計算された属性キャッシュ2. 時計の紹介3...

MIME TYPEとは?MIME-Typesタイプコレクション

MIME タイプとは何ですか? 1. まず、ブラウザがコンテンツを処理する方法を理解する必要がありま...

Vue+element+oss はフロントエンドのフラグメントアップロードとブレークポイント再開を実現します

純粋なフロントエンド実装:切片上傳斷點續傳。斷點續傳カットとアップロードに基づいて実装する必要があり...

RocketMQ の Docker インストールとインストール中に発生した問題の解決策

目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...

Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...

iframe を使用して Web ページに他の Web ページを埋め込む方法

iframe の使い方:コードをコピーコードは次のとおりです。 <DIV align=cent...

Vue3 ドキュメント クイックスタート

目次1. セットアップ1. セットアップ関数の最初のパラメータ - props 2. 文脈2. セッ...

NexusはAPIを使用して操作します

Nexus は RestApi を提供していますが、一部の API はまだ Groovy と組み合わ...

Linux コマンドラインのクイックヒント: ファイルの検索方法

私たちのコンピューターには、ディレクトリ、写真、ソース コードなどのファイルが保存されています。たく...