がんばって


ハウスティンとは何ですか。


関数のすべての宣言を、関数の有効範囲の上部にドラッグ&ドロップします.
JAvascript関数は、実行前に関数に必要なすべての変数値を収集し、有効範囲の上部で宣言します.
  • 有効範囲:関数ブロック{}内有効
  • すなわち,関数では,関数の下部に存在するコンテンツに必要な値を引き上げる.
  • コードは実際にはx,JavaScript解析器によって内部昇格処理された
  • である.
  • 実メモリ変化x
  • 狙いを定める

  • var変数宣言文および関数宣言文にのみエスケープが表示されます(var変数/関数の宣言のみを上に引き上げ、割り当てを上げることはありません.let、const、および関数式でエスケープxが発生します)
  • 変数の加速


    var

  • 宣言+初期化RightArrow割当
  • 関数級スコプラー関数外部宣言時のグローバル変数は
  • である.
  • 変数宣言の前に変数を参照する場合、
  • は常に定義されていません.
  • 号転送発生
  • let/const

  • 宣言RightArrowTDZRightArrow初期化(変数がメモリに割り当てられ、未定義のプロシージャに初期化されている)RightArrow割り当て
  • 宣言のみがブートされ、初期化前にアクセスするため、TDZによって
  • エラーが発生します.
    実行する前に、JavaScriptエンジンによって宣言ステップが最初に実行されます.その後初期化ステップが実行されない場合、アクセス時に参照エラーが発生します.(TDZ)
    一時死角(TDZ:Temporal Dead Zone):スキャンの開始点(宣言フェーズ)から初期化フェーズの開始点までは一時的に参照できません.

    let


    変数繰り返し宣言x(再割り当て可能)
    宣言フェーズと初期化フェーズは別々に行われる.

    const


    変数繰り返し宣言xRightarrow*は、宣言と初期化を同時に行う必要があります.Rightarrow*実行時まで実行できません.
    再宣言、再割当x(再割当はオブジェクトとして使用可能)RightArrow=再割当は禁止されていますが、xは変更されません.

    n/a.結論


    エスケープは発生しますが、エスケープに入ると変数が作成され、コード実行がその変数の実際の位置に到達するまでTDZが生成されます.

    関数の加速


    関数宣言メソッド

  • 関数宣言:実行時の前に、まずJavaScriptエンジンで実行し、関数自体を
  • に起動することができる.
      function foo() { // 함수선언문(호이스팅 o)
          console.log("hello");
      }
  • 関数式:実行時までに値を未定義に初期化し、エスケープ
  • は許可されません.
     var foo2 = function() { // 함수표현식(호이스팅 x)
          console.log("hello2");
      }
  • Functionジェネレータ関数:実行時に割り当てられたオブジェクト.関数の作成時に解析を実行します(エンクロージャは作成せず、常にグローバル範囲で作成され、独自の領域変数とグローバル変数のみにアクセスできます)
  • .
    var foo3 = new Function(console.log("hello"));
  • 矢印関数:非互換
  • var foo4 = () => console.log("bar");

    転送優先度


    同じ名前のvar変数宣言と関数宣言で呼び出されます。

  • 変数宣言>関数宣言(上向き)
  • が指定されていない変数の場合、関数宣言文は変数を上書きします.
  • の値が割り当てられた変数の場合、変数は関数宣言を上書きします.
  • どうしてハウスティンを知ってるの?


    ES 6はどこでも利用可能で時間がかかるため、ES 5に変換する必要がある.Rightarrork=varは、まだどのように動作するかを知る必要があります.