ホームページ >ウェブフロントエンド >jsチュートリアル >巻き上げ: 時間的不感帯に面する

巻き上げ: 時間的不感帯に面する

DDD
DDDオリジナル
2024-12-13 12:44:11630ブラウズ

Hoisting: facing Temporal dead zone

おそらく、var と let および const の基本的な違いについて考えているのではないでしょうか。「const は読み取り専用、let は変更可能、var は両方です」 " そして唯一の違いは、ES6const を導入したことです。 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

}

ありがとうES6*

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。