ホームページ >ウェブフロントエンド >jsチュートリアル >巻き上げ: 時間的不感帯に面する
おそらく、var と let および const の基本的な違いについて考えているのではないでしょうか。「const は読み取り専用、let は変更可能、var は両方です」 " そして唯一の違いは、ES6 が const を導入したことです。 let、および var は 昔ながらの 構文です。
そうですね、全然違います。
1.- ここで、宣言する前に let 値を呼び出すことができないことは明らかです
favCoffee = 'espresso' function showFavoriteCoffe() { console.log(favCoffee) } showFavoriteCoffe() // Cannot access 'favCoffee' before initialization let favCoffee
2.- 代わりに var を使用すると変わる可能性があります let:
favCoffee = 'espresso' function showFavoriteCoffe() { console.log(favCoffee) } showFavoriteCoffe() //espresso var favCoffee
ええ、おそらく、var を使用した追加のパワーのように見えます。
これはホイスティングと呼ばれ、変数を宣言する前に使用できるようにするプロセスです。
3.- 他の例を考えてみましょう:
console.log(favCoffee) // undefined var favCoffee = 'americano'
ただし、この例では var も ホイスティング していますが、ここでは TDZ に直面します。
変数がスコープ内にあるにもかかわらず、宣言されておらず、アクセスできない状態として定義されます。
{ /* TDZ starts . . . */ var favCoffee = 'expresso' // TDZ ends console.log(favCoffee) // expresso }
TDZによるホイスティングプロセスでは、デフォルトでJSは未定義として初期化されたvar値を返しますが、letまたはconst 変数が宣言されていないことを示すエラーを返します。したがって、これはエラーを検出するのに非常に役立ち、宣言される前に変数の使用を避けることができます
//using var favCoffee = 'expresso' var favCoffee console.log(favCoffee) // undefined
//using const favCoffee = 'expresso' const favCoffee console.log(favCoffee) // uncaught ReferenceError: Cannot access 'favCoffee' before initialization
(これが、コーディング時の間違いを避けるために ESLint のようなレポーター ルーラーの使用を検討することが重要である理由です)。
ホイスティングは常に存在するため、可能な限り let と const を使用することが重要です。これにより、未定義のエラーが回避され、より速くエラーを捕捉できるようになります。
** ES6
以上が巻き上げ: 時間的不感帯に面するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。