ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript Hoisting-何が動くのか、何が続くか

JavaScript Hoisting-何が動くのか、何が続くか

DDD
リリース: 2025-01-30 08:30:10
オリジナル
406 人が閲覧しました

Javascript Hoisting - What Moves and What Stays

JavaScriptの改善メカニズムは、ステージプレイの設定のようなものです。コードが実行される前に(「作成段階」)、JavaScriptは、ステージスタッフがカーテンが上がる前に指定された位置に小道具を移動するように、すべての宣言をその範囲の最上位に上げます。唯一の違いは、ステートメントのみが提起され、初期化が改善されていないことです。

改善

この例では、varステートメントはスコープの最上部に宣伝されていますが、初期化は改善されていません。これが、エラーをスローする代わりに、最初の出力

を出力する理由です。変数は存在しますが、割り当てられていません。
console.log(x); // 输出:undefined
var x = 5;
console.log(x); // 输出:5
ログイン後にコピー

<<> andvar x一時的な死んだエリア(TDZ)x = 5 console.log(x) この例では、undefinedステートメントが改善されましたが、初期化前に一時的な死んだエリア(TDZ)にありました。初期化がxにつながる前に、

にアクセスしてみてください。この動作は、<、>、

とは異なり、同様の状況でのみletに戻ります。 const

console.log(y); // 抛出ReferenceError: Cannot access 'y' before initialization
let y = 10;
console.log(y); // 输出:10
ログイン後にコピー
これには、もちろん、機能を含む<这>または

宣言を使用したコンテンツも含まれます。 let y y ReferenceError一時的な死んだエリア(TDZ)var 一時的な死んだエリアについて言えば、これは初期化の前にvarundefined宣言されています。最初のアクセスの前に

を返す場合とは<始>とは異なりますが、これらの最新の声明は誤解されます。 ECMAScriptの仕様は、この動作を「一時的な死んだ地域のセマンティクス」と呼んでいますが、「JavaScriptは私たちを正直にする」と呼んでいます。

少し難しい例let const

ここで何が見られましたか?機能的宣言<提>が改善されたため、事前に呼び出すことができます。しかし、<呢>はどうですか?それはまだその場所にとどまります。これが、<部>訪問

を与える理由です。スクリプトの準備が整う前に読み込もうとしています。

クレーム宣言のtraplet constクラスを改善する方法は同じではありません。 var undefined

クラスは改善されていますが、定義が評価される前にまだ「一時的なデッドゾーン」にあります。これは、宣言する前にそれらにアクセスできないことを意味します。

function setupEventHandler() {
  handleClick(); // 可运行!

  const config = {
    debug: true,
  };

  function handleClick() {
    if (config?.debug) {
      // 未定义!
      console.log("Debug mode");
    }
  }
}

setupEventHandler();
ログイン後にコピー
覚えておいて、声明は上部に移動したが、初期化は変わらなかった。

以上がJavaScript Hoisting-何が動くのか、何が続くかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート