es6 の一時的なデッドゾーンとは何を意味しますか?
es6 では、一時的なデッド ゾーンは構文エラーであり、ブロックを閉じたスコープにする let および const コマンドを指します。コード ブロック内では、let/const コマンドを使用して変数が宣言される前に、変数は使用できず、変数が宣言される前は変数の「デッド ゾーン」に属します。これは構文上「一時デッド ゾーン」と呼ばれます。 ES6 では、一時的なデッド ゾーンや let ステートメントや const ステートメントでは変数のプロモーションが発生しないことを規定しています。これは主に実行時エラーを軽減し、変数が宣言される前に使用されて予期せぬ動作が発生することを防ぐためです。
このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
一時的なデッド ゾーンとは
#ES6 のコード ブロック内で、let/const コマンドを使用して変数を宣言する前、変数は使用できず、宣言される前は変数の「デッド ゾーン」に属しています。文法的には、これは「一時的なデッド ゾーン」(TDZ) と呼ばれます。 ES 標準では TDZ について明示的に言及していませんが、let と const の改善しない効果を説明するためによく使用されます。
let/const と var
ES6 より前は、JS スコープはグローバル スコープと関数スコープの 2 種類しかありませんでした。しかし、ES6 ではブロックレベルのスコープが登場しました。つまり、ブロックレベルのスコープは let/const を使用して定義できます。 ES6 の新機能の中で、TDZ の役割を確認する最も簡単な方法は、let/const を使用することです。 let/const と var には主に 2 つの違いがあります:
- let/const はブロック スコープを使用します; var は関数スコープを使用します
- let/const が宣言される前に対応する変数にアクセスする場合および定数の場合は、ReferenceError がスローされますが、var 宣言の前に対応する変数にアクセスすると、unknown が返されます
console.log(Vname); // undefined; console.log(Lname); // ReferenceError var Vname = 'xiaoxiao'; let Lname = 'xiaoxiao';
実践により、宣言前に var 定義を使用すると、 let's変数を使用する場合は未定義ですが、let's unknown変数を使用するとエラーがスローされます。 ES6 の let で宣言された変数には変数昇格の効果がないためです。
var x = 10; if (true) { x = 20; // ReferenceError let x; }
ES6 では、ブロック内に let および const コマンドがある場合、このブロック内のこれらのコマンドによって宣言された変数は最初から閉じられたスコープを形成することを明確に規定しています。宣言前にこれらの変数を使用すると、エラーが発生します。 つまり、コード ブロック内では、let コマンドを使用して宣言されるまで変数は使用できません。文法的には、これは「一時的なデッド ゾーン」(TDZ) と呼ばれます。
if (true) { // TDZ开始 tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; // TDZ结束 console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 }
上記のコードでは、let コマンドが変数 tmp を宣言する前に、変数 tmp の「デッド ゾーン」に属しています。
typeof の「デッド ゾーン」トラップ
typeof を使用すると、指定された変数のデータ型を検出できることは誰もが知っています。値が定義されているかどうかを決定します。 unknown が返された場合、値が未定義であることを意味します。 ただし、typeof の宣言前に const/let で定義された変数を使用するとエラーが報告されます
typeof x; // ReferenceError let x;
x は let で宣言されているため、x 宣言前は一時的なデッドゾーンとなります。 typeof エラーが報告されます。したがって、let/const を使用して宣言された変数は、typeof を使用するときに必ずしも安全であるとは限りません。
typeof y; // 'undefined'
しかし、typeof を定義せずに単に使用した場合、エラーは報告されないことがわかります。このことから、const/let 定義を使用するための明確な規定がない限り、エラーは報告されないことがわかります。エラーにはなりません。
パラメータを渡す「デッドゾーン」の罠
たとえば、次のコードでは、
function bar(x = y, y = 2) { return [x, y]; } bar(); // 报错
上記のコードで、bar 関数を呼び出すとエラーが報告される理由 (一部の実装ではエラーが報告されない場合があります) は、パラメーター x のデフォルト値が別のパラメーター y と等しく、この時点では y が宣言されていないためです。 「デッドゾーン」に属する時間。 y のデフォルト値が x の場合、x はこの時点で宣言されているため、エラーは報告されません。
function bar(x = 2, y = x) { return [x, y]; } bar(); // [2, 2]
var ステートメントと let ステートメントの使用のもう 1 つの違い。
// 不报错 var x = x; // 报错 let x = x; // ReferenceError: x is not defined
「デッド ゾーン」の影響を受け、let を使用して変数を宣言する場合、宣言が完了する前に変数が使用されている限り、エラーが報告されます。上の行はこの状況に属し、変数 x の宣言文が実行される前に x の値が取得されるため、「x が定義されていません」というエラーが発生します。
概要
ES6 では、主に実行時エラーを削減し、エラーを防ぐために、一時的なデッド ゾーンや let ステートメントや const ステートメントでは変数のプロモーションが発生しないと規定しています。変数を宣言する前に使用すると、予期しない動作が発生する可能性があります。このような間違いは ES5 ではよくあることですが、この規定が整備されたことで、それらを避けるのは簡単です。
つまり、一時的なデッド ゾーンの本質は、現在のスコープに入るとすぐに、使用したい変数がすでに存在するにもかかわらず、それを取得できないということです。変数を宣言するコード行が表示されるので、この変数を使用します。
注: TDZ はもともと const 用に設計されましたが、その後の let の設計にも一貫性がありました。
注: ES6 標準では、const に対して宣言された識別子は依然として定数変数と呼ばれる変数であることがよくあります。 const 宣言で作成された定数は JS では再代入できませんが、不変ではないため、両者の概念には依然として大きな違いがあります。
【関連する推奨事項: 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)

ホットトピック









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

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

手順: 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)」です。

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

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 つの独立したキーとして現れることができます。
