後から別のスクリプト タグ内で作成した変数に対して console.log() を使用すると、「未定義」がコンソールに記録されずにエラーが発生するのはなぜですか?
P粉579008412
P粉579008412 2023-09-12 22:58:00
0
1
556

このコード スニペットにより、コンソールに「Uncaught ReferenceError: x is not Defined」というエラーが表示されるのはなぜですか

リーリー

そして、このレコードは「未定義」ですか?

リーリー

変数宣言と変数スコープを理解しようとしています。コード全体が同じページ内にあるため、ブーストが発生することが予想されます。しかし、console.log() が別の script タグで区切られているため、コンソールに「unknown」が記録されるだけでなく、エラーが発生します。

P粉579008412
P粉579008412

全員に返信(1)
P粉536909186

var はプロモートされます。これは、たとえ宣言行がスコープの最後にあっても、それが定義されているスコープの先頭からアクセスできることを意味します。宣言する前に var にアクセスすると、宣言を実行し、場合によっては変数を特定の値に初期化する必要があるため、変数は 未定義になります。 これが 2 番目の例の仕組みです。

ブーストについてはこちらをご覧ください:

https://developer.mozilla.org/en-US/docs/glossary/lifting

しかし、最初の例 2 には 2 つの異なるスコープがあるため、基本的に var は最初のスクリプトに存在しないため、エラー not Defined が発生します。

var とその範囲については、こちらをご覧ください:

https://developer.mozilla.org /en-US/docs/Web/JavaScript/Reference/Statements/var

######重要###

var を使用しないことを強くお勧めします。代わりに constlet を使用してください。プロモーションに var を使用すると、デバッグや修正が困難なエラーが発生する可能性があります。運用環境で var のみを使用する必要がある場合は、esbuild を使用してコードを適切な古いバージョンの JS にダウングレードしてください。 興味深いことに、const

letやや昇格されていますが、昇格された状態でこれらにアクセスすると、ランタイム エラーが発生します (これは一時的なデッド ゾーンと呼ばれます) )、これが、黙って var を呼び出して、知らない潜在的なエラーを残すよりも、即座にエラーを受け取るため、より安全である理由です。 一時的なデッドゾーンについて:

https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Statements/let#temporal_dead_zone_tdz

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート