ES6のアロー機能とこのポインティングの詳細な説明
この記事では、javascript に関する関連知識を提供します, 主にアロー関数とこれによって指摘される関連問題を紹介します. 通常の関数における this は、この関数が呼び出されたときのオブジェクトを表します。アロー関数には独自の this がありません。アロー関数内の this は外部の this を継承します。見てみましょう。皆さんの参考になれば幸いです。
[関連する推奨事項: JavaScript ビデオ チュートリアル 、Web フロントエンド ]
1 . アロー関数
Use arrows => 関数の定義
var fn = function(num){ return num;}var fn1 = (num)=>num;var fn3 = ()=>1;var fn4 = (num1,num2,num3)=>num
アロー関数のコード ブロック部分に複数のステートメントがある場合は、中かっこを使用してステートメントを囲み、次を使用します。戻るに戻る。
var func = (a,b)=>{ return a+b; }
中括弧 {} はコード ブロックとして解釈されるため、アロー関数が直接オブジェクトを返す場合は、オブジェクトの外側に中括弧を追加する必要があります。追加しないとエラーが報告されます。
var func = (a,b)=>{name:a,age:b} //报错var func4 = (a,b)=>{ return { name: a, age :b } } // 不报错
アロー関数には、このポインティングの問題を解決するという、より重要な役割もあります。
2.this は
を指します。まず、通常の関数での this について説明します。通常の関数での this は、この関数が呼び出されたときのオブジェクトを表します。アロー関数には独自の this はなく、アロー関数内の this は外部の this を継承します。あるいは、コード
ブロックの概念を使用して説明する方が直観的です。アロー関数の this は、外側のコード ブロックの this です。例を示します:
アロー関数は ES6 の新機能です。独自の this はなく、this ポイントはありません。コードベースの継承。
アロー関数を使用する場合は、いくつか注意すべき点があります。
- アロー関数はコンストラクターとして使用できず、エラーがスローされます。使用されている場合
- arguments パラメーターは使用できません。使用したい場合は、rest を使用してください
- yield コマンドは使用できないため、アロー関数をジェネレーター関数として使用することはできません
- 独自の this がないため、bind、call、apply を通じて this ポインタを変更することはできません。
- しかし、これは、矢印の this ポインタが変更されることを意味するわけではありません。関数は静的です。外部コード ベースの this ポインタを変更することで制御できます。
- アロー関数の this は外部コード ベースから継承されるため、アロー関数の this は、アロー関数の this がバインドされるときにバインドされます。通常の関数の場合、呼び出し時に this が
- リテラル オブジェクトを直接ポイントしていることが決定されます。定義されたアロー関数の this はオブジェクトをバインドせず、外側のレイヤーを探します。最も単純なケースウィンドウにバインドすることです
PS: 実際の開発環境では、React はアロー関数を使用して問題を解決できます。典型的な質問なので、ここでは詳しく説明しません。
アロー関数の実際の状況を確認するための例を示します:
const obj = { fun1: function () { console.log(this); return () => { console.log(this); } }, fun2: function () { return function () { console.log(this); return () => { console.log(this); } } }, fun3: () => { console.log(this); } } let f1 = obj.fun1(); // obj f1() // obj let f2 = obj.fun2(); let f2_2 = f2(); // window f2_2() // window obj.fun3(); // window
各行の出力の分析:
let f1 = obj.fun1() // obj
明らかなことここで行われるのは暗黙的な型バインディングです。fun1 の this は obj を指します
f1() // obj
前の行から返されたアロー関数がここで実行されます。コード ライブラリの前の層の this が obj を指していると分析します。直接継承され、これが指すアロー関数は
objlet f2 =obj.fun2()
fun2の最初の層は、実行時にコードを出力しませんでしたが、関数を返し、それをf2に割り当てました。ここでバインドロスが発生しました。これは元の obj から window を指します (割り当てが発生しました)
let f2_2 = f2() // window
f2() が実行され、変更された this——window が出力され、アロー関数が返されて f2_2f
2_2() // window
obj.fun3() // window
上記のコードに基づく:
let fun4 = f2.bind(obj)() // obj fun4() // obj
fun2: function () { return function () { // 我们修改的是这里的this console.log(this); return () => { // 然后这里定义的时候就继承啦 console.log(this); } } },
JavaScript ビデオ チュートリアル 、Web フロントエンド ]
以上がES6のアロー機能とこのポインティングの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ES6 では、配列オブジェクトの reverse() メソッドを使用して、配列の反転を実現できます。このメソッドは、配列内の要素の順序を逆にして、最後の要素を最初に、最初の要素を最後に配置するために使用されます。構文「array」 。逆行する()"。 reverse() メソッドは元の配列を変更します。変更したくない場合は、拡張演算子 "..." とともに使用する必要があり、構文は "[...array].reverse() 」。

非同期はes7です。 async と await は ES7 に新しく追加されたもので、非同期操作のソリューションです。async/await は co モジュールとジェネレーター関数の糖衣構文と言え、より明確なセマンティクスで JS 非同期コードを解決します。名前が示すように、async は「非同期」を意味します。async は関数が非同期であることを宣言するために使用されます。async と await の間には厳密な規則があります。両方を互いに分離することはできず、await は async 関数内でのみ記述できます。

ブラウザの互換性のため。 ES6 は JS の新しい仕様として、多くの新しい構文と API を追加していますが、最新のブラウザーは ES6 の新機能を高度にサポートしていないため、ES6 コードを ES5 コードに変換する必要があります。 WeChat Web 開発者ツールでは、デフォルトで babel が使用され、開発者の ES6 構文コードを 3 つの端末すべてで適切にサポートされる ES5 コードに変換し、開発者がさまざまな環境によって引き起こされる開発上の問題を解決できるようにします。プロジェクト内でのみ設定して確認するだけです。 「ES6~ES5」オプション。

手順: 1. 構文 "newA=new Set(a); newB=new Set(b);" を使用して、2 つの配列をそれぞれセット型に変換します; 2. has() と filter() を使用して差分セットを検索します、構文 " new Set([...newA].filter(x =>!newB.has(x)))" では、差分セット要素がセット コレクションに含まれて返されます。 3. 配列を使用します。 from セットを配列に変換するタイプ、構文は「Array.from(collection)」です。

es5 では、for ステートメントと IndexOf() 関数を使用して配列の重複排除を実現できます。構文 "for(i=0;i<配列長;i++){a=newArr.indexOf(arr[i]);if( a== -1){...}}」。 es6 では、スプレッド演算子 Array.from() および Set を使用して重複を削除できます。まず配列を Set オブジェクトに変換して重複を削除してから、スプレッド演算子または Array.from() 関数を使用する必要があります。 Set オブジェクトを配列に変換してグループ化するだけです。

es6 では、一時的なデッド ゾーンは構文エラーであり、ブロックを閉じたスコープにする let および const コマンドを指します。コード ブロック内では、let/const コマンドを使用して変数が宣言される前に、変数は使用できず、変数が宣言される前は変数の「デッド ゾーン」に属します。これは構文上「一時デッド ゾーン」と呼ばれます。 ES6 では、一時的なデッド ゾーンや let ステートメントや const ステートメントでは変数のプロモーションが発生しないことを規定しています。これは主に実行時エラーを減らし、変数が宣言される前に使用されて予期しない動作が発生するのを防ぐためです。

いいえ、require は CommonJS 仕様のモジュール構文であり、es6 仕様のモジュール構文は import です。 require は実行時にロードされ、import はコンパイル時にロードされます。require はコード内のどこにでも記述できます。import はファイルの先頭にのみ記述でき、条件文や関数スコープでは使用できません。モジュール属性は導入されるだけです。 require を実行した場合、そのためパフォーマンスは比較的低くなりますが、インポート コンパイル中に導入されたモジュールのプロパティのパフォーマンスはわずかに高くなります。

地図は注文済みです。 ES6 のマップ タイプは、多くのキーと値のペアを格納する順序付きリストです。キー名と対応する値はすべてのデータ型をサポートします。キー名の等価性は、「Objext.is()」メソッドを呼び出すことによって決定されます。 , したがって、数字の 5 と文字列「5」は 2 つのタイプとして判断され、プログラム内で 2 つの独立したキーとして現れることができます。
