ホームページ  >  に質問  >  本文

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

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

リーリー

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

リーリー

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

P粉579008412P粉579008412375日前506

全員に返信(1)返信します

  • P粉536909186

    P粉5369091862023-09-13 00:07:23

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

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

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

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

    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
  • キャンセル返事