がんばって


がんばってください。

console.log(variable); //undefined

var variable;
コード作成はJavaScriptの特徴であり,その行為は宣言がコードの先端に昇格したようなものである.JAvascriptエンジンは、コードが行ごとに実行される(実行時)前に、ソースコードを評価し、ソースコード内の宣言を検索して最初に実行します.(実行コンテキストを理解している場合は、このセクションをより詳細に理解できます.後で関連コンテンツを作成します)
したがって、上記のコードで宣言された変数の部分は、まず実行され、出力が実行されます.

へんすうかそく


へんすう


ブートを理解するには、変数メカニズムを理解する必要があります.
変数は、宣言=>初期化=>割り当てのフェーズを経験します.varキーワードとletキーワードがこのステップを実行するプロセスが異なり、それに応じて異なるブート方式も発生します.

var


varキーワードとして宣言された変数は、実行時までに宣言フェーズと初期化フェーズを経ます.
console.log(v);//undefined

v = 100;

console.log(v);//100

var v = 200;

console.log(v);//200
上のコードを見て、実行順序と結果を予測します.
まず、実行時の前にvarvでvの宣言と初期化を行います.さらに宣言された部分がない場合は、最初の行から実行します.最初のコンソールでは、vは初期化状態であり、値は指定されていないため、undefinedが出力されます.そして、vには100が割り当てられるので、2回目の出力の値は100となる.次に200が割り当てられ、最後に200が出力される.

let


letキーワード宣言の変数は、実行時まで宣言のみを実行します.初期化は、以降の実行時に宣言に達した場合にのみ行われます.letキーワードにおける宣言から初期化フェーズまでの間隔を一時的な死角領域と呼ぶ.
console.log(v); //Cannot access 'v' before initialization

let v;

console.log(v);//undefined

v = 100;

console.log(v);//100
実行時にlet vを実行してから宣言します.最初の出力では、初期化がまだ行われていないため、エラーが発生しました.その後letvに再到達すると初期化され,2番目のコンソールはundefinedを出力する.最後に100が割り当てられ、100が出力される.
letキーワードを使用すると、エスケープが発生しますが、エスケープは発生しないように見えます.前述したように、実行時までは宣言フェーズしか行われず、letキーワードを使用する根拠となるためです.
△ハウスティンは開発者の立場で混乱を激化させた.なぜハウスティンが必要なのか.

関数の加速


関数のエスケープは、宣言か式かによって異なります.関数の生成点が異なるため、異なる方法でエスケープされます.

関数宣言


宣言を使用して関数を定義すると、実行時までに関数オブジェクトが作成されます.JavaScriptエンジンは、関数名と同じ名前の識別子を生成し、生成した関数オブジェクトを識別子に割り当てます.
変数であれば宣言・初期化・配分が可能です.
console.log(add(2, 3)); //5

function add(x, y) {
  return x + y;
}
以下の手順で起動します.
  • add関数の宣言を読みます.
  • add関数のオブジェクトを生成します.
  • addという識別子を生成します.
  • 生成された
  • 関数オブジェクトを識別子に割り当てます.
  • addというadd関数を使用します.(console)
  • 関数式


    関数式で関数を記述すると、変数反発が発生します.
    console.log(add);//undefined
    
    var add = (x, y) => {
      return x + y;
    };
    
    console.log(add(2, 3));//5
    以下の手順で、変数番号のように動作します.
  • 変数addが宣言され、初期化されます.
  • の最初の出力は割り当てられていないため、
  • は定義されていない.
  • 関数オブジェクトを作成し、変数に関数を割り当てます.
  • 関数を実行し、5を出力します.
  • varではなくletを使用すると、変数hoistingでletを使用するように動作します.