亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ ウェブフロントエンド フロントエンドQ&A es6 の一時(shí)的なデッドゾーンとは何を意味しますか?

es6 の一時(shí)的なデッドゾーンとは何を意味しますか?

Jan 03, 2023 pm 03:56 PM
es6 一時(shí)的なデッドゾーン

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)作が発生することを防ぐためです。

es6 の一時(shí)的なデッドゾーンとは何を意味しますか?

このチュートリアルの動(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 サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ES6 で配列を反転する方法 ES6 で配列を反転する方法 Oct 26, 2022 pm 06:19 PM

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

非同期は es6 または es7 用ですか? 非同期は es6 または es7 用ですか? Jan 29, 2023 pm 05:36 PM

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

ミニ プログラムで es6 を es5 に変換する必要があるのはなぜですか? ミニ プログラムで es6 を es5 に変換する必要があるのはなぜですか? Nov 21, 2022 pm 06:15 PM

ブラウザの互換性のため。 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」オプション。

es6 の 2 つの配列で異なる項(xiàng)目を見つける方法 es6 の 2 つの配列で異なる項(xiàng)目を見つける方法 Nov 01, 2022 pm 06:07 PM

手順: 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 および es6 で配列重複排除を?qū)g裝する方法 es5 および es6 で配列重複排除を?qū)g裝する方法 Jan 16, 2023 pm 05:09 PM

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í)的なデッドゾーンとは何を意味しますか? es6 の一時(shí)的なデッドゾーンとは何を意味しますか? Jan 03, 2023 pm 03:56 PM

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)作が発生するのを防ぐためです。

es6 構(gòu)文が必要ですか? es6 構(gòu)文が必要ですか? Oct 21, 2022 pm 04:09 PM

いいえ、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 の配列にある項(xiàng)目の數(shù)を確認(rèn)する方法 es6 の配列にある項(xiàng)目の數(shù)を確認(rèn)する方法 Jan 18, 2023 pm 07:22 PM

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

See all articles