es6 では、一時(shí)的なデッド ゾーンは構(gòu)文エラーであり、ブロックを閉じたスコープにする let および const コマンドを指します。コード ブロック內(nèi)では、let/const コマンドを使用して変數(shù)が宣言される前に、変數(shù)は使用できず、変數(shù)が宣言される前は変數(shù)の「デッド ゾーン」に屬します。これは構(gòu)文上「一時(shí)デッド ゾーン」と呼ばれます。 ES6 では、一時(shí)的なデッド ゾーンや let ステートメントや const ステートメントでは変數(shù)のプロモーションが発生しないことを規(guī)定しています。これは主に実行時(shí)エラーを軽減し、変數(shù)が宣言される前に使用されて予期せぬ動(dòng)作が発生することを防ぐためです。
このチュートリアルの動(dòng)作環(huán)境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
一時(shí)的なデッド ゾーンとは
#ES6 のコード ブロック內(nèi)で、let/const コマンドを使用して変數(shù)を宣言する前、変數(shù)は使用できず、宣言される前は変數(shù)の「デッド ゾーン」に屬しています。文法的には、これは「一時(shí)的なデッド ゾーン」(TDZ) と呼ばれます。 ES 標(biāo)準(zhǔn)では TDZ について明示的に言及していませんが、let と const の改善しない効果を説明するためによく使用されます。
let/const と var
ES6 より前は、JS スコープはグローバル スコープと関數(shù)スコープの 2 種類しかありませんでした。しかし、ES6 ではブロックレベルのスコープが登場しました。つまり、ブロックレベルのスコープは let/const を使用して定義できます。 ES6 の新機(jī)能の中で、TDZ の役割を確認(rèn)する最も簡単な方法は、let/const を使用することです。 let/const と var には主に 2 つの違いがあります:
- let/const はブロック スコープを使用します; var は関數(shù)スコープを使用します
- let/const が宣言される前に対応する変數(shù)にアクセスする場合および定數(shù)の場合は、ReferenceError がスローされますが、var 宣言の前に対応する変數(shù)にアクセスすると、unknown が返されます
console.log(Vname); // undefined; console.log(Lname); // ReferenceError var Vname = 'xiaoxiao'; let Lname = 'xiaoxiao';
実踐により、宣言前に var 定義を使用すると、 let's変數(shù)を使用する場合は未定義ですが、let's unknown変數(shù)を使用するとエラーがスローされます。 ES6 の let で宣言された変數(shù)には変數(shù)昇格の効果がないためです。
var x = 10; if (true) { x = 20; // ReferenceError let x; }
ES6 では、ブロック內(nèi)に let および const コマンドがある場合、このブロック內(nèi)のこれらのコマンドによって宣言された変數(shù)は最初から閉じられたスコープを形成することを明確に規(guī)定しています。宣言前にこれらの変數(shù)を使用すると、エラーが発生します。 つまり、コード ブロック內(nèi)では、let コマンドを使用して宣言されるまで変數(shù)は使用できません。文法的には、これは「一時(shí)的なデッド ゾーン」(TDZ) と呼ばれます。
if (true) { // TDZ開始 tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; // TDZ結(jié)束 console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 }
上記のコードでは、let コマンドが変數(shù) tmp を宣言する前に、変數(shù) tmp の「デッド ゾーン」に屬しています。
typeof の「デッド ゾーン」トラップ
typeof を使用すると、指定された変數(shù)のデータ型を検出できることは誰もが知っています。値が定義されているかどうかを決定します。 unknown が返された場合、値が未定義であることを意味します。 ただし、typeof の宣言前に const/let で定義された変數(shù)を使用するとエラーが報(bào)告されます
typeof x; // ReferenceError let x;
x は let で宣言されているため、x 宣言前は一時(shí)的なデッドゾーンとなります。 typeof エラーが報(bào)告されます。したがって、let/const を使用して宣言された変數(shù)は、typeof を使用するときに必ずしも安全であるとは限りません。
typeof y; // 'undefined'
しかし、typeof を定義せずに単に使用した場合、エラーは報(bào)告されないことがわかります。このことから、const/let 定義を使用するための明確な規(guī)定がない限り、エラーは報(bào)告されないことがわかります。エラーにはなりません。
パラメータを渡す「デッドゾーン」の罠
たとえば、次のコードでは、
function bar(x = y, y = 2) { return [x, y]; } bar(); // 報(bào)錯(cuò)を使用しています。
上記のコードで、bar 関數(shù)を呼び出すとエラーが報(bào)告される理由 (一部の実裝ではエラーが報(bào)告されない場合があります) は、パラメーター x のデフォルト値が別のパラメーター y と等しく、この時(shí)點(diǎn)では y が宣言されていないためです。 「デッドゾーン」に屬する時(shí)間。 y のデフォルト値が x の場合、x はこの時(shí)點(diǎn)で宣言されているため、エラーは報(bào)告されません。
function bar(x = 2, y = x) { return [x, y]; } bar(); // [2, 2]
var ステートメントと let ステートメントの使用のもう 1 つの違い。
// 不報(bào)錯(cuò) var x = x; // 報(bào)錯(cuò) let x = x; // ReferenceError: x is not defined
「デッド ゾーン」の影響を受け、let を使用して変數(shù)を宣言する場合、宣言が完了する前に変數(shù)が使用されている限り、エラーが報(bào)告されます。上の行はこの狀況に屬し、変數(shù) x の宣言文が実行される前に x の値が取得されるため、「x が定義されていません」というエラーが発生します。
概要
ES6 では、主に実行時(shí)エラーを削減し、エラーを防ぐために、一時(shí)的なデッド ゾーンや let ステートメントや const ステートメントでは変數(shù)のプロモーションが発生しないと規(guī)定しています。変數(shù)を宣言する前に使用すると、予期しない動(dòng)作が発生する可能性があります。このような間違いは ES5 ではよくあることですが、この規(guī)定が整備されたことで、それらを避けるのは簡単です。
つまり、一時(shí)的なデッド ゾーンの本質(zhì)は、現(xiàn)在のスコープに入るとすぐに、使用したい変數(shù)がすでに存在するにもかかわらず、それを取得できないということです。変數(shù)を宣言するコード行が表示されるので、この変數(shù)を使用します。
注: TDZ はもともと const 用に設(shè)計(jì)されましたが、その後の let の設(shè)計(jì)にも一貫性がありました。
注: ES6 標(biāo)準(zhǔn)では、const に対して宣言された識別子は依然として定數(shù)変數(shù)と呼ばれる変數(shù)であることがよくあります。 const 宣言で作成された定數(shù)は JS では再代入できませんが、不変ではないため、両者の概念には依然として大きな違いがあります。
【関連する推奨事項(xiàng): JavaScript ビデオ チュートリアル 、Web フロントエンド ]
以上がes6 の一時(shí)的なデッドゾーンとは何を意味しますか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

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

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

ホットトピック

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

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

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

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

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

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

いいえ、require は CommonJS 仕様のモジュール構(gòu)文であり、es6 仕様のモジュール構(gòu)文は import です。 require は実行時(shí)にロードされ、import はコンパイル時(shí)にロードされます。require はコード內(nèi)のどこにでも記述できます。import はファイルの先頭にのみ記述でき、條件文や関數(shù)スコープでは使用できません。モジュール屬性は導(dǎo)入されるだけです。 require を?qū)g行した場合、そのためパフォーマンスは比較的低くなりますが、インポート コンパイル中に導(dǎo)入されたモジュールのプロパティのパフォーマンスはわずかに高くなります。

ES6 では、配列オブジェクトの length 屬性を使用して、配列內(nèi)にある項(xiàng)目の數(shù)を決定する、つまり、配列內(nèi)の要素の數(shù)を取得できます。この屬性は、配列內(nèi)の要素の數(shù)を返すことができます。 "array.length" ステートメントを使用すると、配列オブジェクトの要素の數(shù)を表す値、つまり長さの値が返されます。
