理解[JS]護送-基本編



建設現場の周りを通ると、このような奇妙なエレベーターが見えやすい.
建設現場では、このエレベーターはハウスと呼ばれていますが、JavaScriptのハウスの概念はこれと似ています.
HoistingはJavaScriptで起こった変な(?)これは現象の一つです.
シースを初めて学ぶと、変数と関数宣言が物理的にコードの上部に移動し、動作することを理解します.
しかし、これは誤った概念です.
MDNの公式文書には、次の状況が記載されています.
変数と関数宣言は、コンパイルフェーズのメモリに格納されますが、コードに入力された場所と完全に一致します.
  • 関数ブート
  • // 1
    function catName(name) {
      console.log("My cat's name is " + name);
    }
    
    catName("Tigger");
    /*
    위 코드의 결과는: "My cat's name is Tigger"
    */
    // 2
    catName("Chloe");
    
    function catName(name) {
      console.log("My cat's name is " + name);
    }
    /*
    위 코드의 결과는: "My cat's name is Chloe"
    */
    第2の例では、関数のエスケープが発生する.
    関数を宣言する前に、関数を実行してエラーが発生する可能性があります.
    関数実行コードを実行する前に、関数宣言をメモリに保存するので、エラーは発生しません.
  • 変数護衛
  • num = 6;
    num + 7;
    var num;
    /* num이 선언되지 않더라도 에러를 내지 않습니다 */
    var x = 1; // x 초기화
    console.log(x + " " + y); // '1 undefined'
    var y = 2;
    
    
    // 아래 코드는 이전 코드와 같은 방식으로 동작합니다.
    var x = 1; // Initialize x
    var y; // Declare y
    console.log(x + " " + y); // '1 undefined'
    y = 2; // Initialize y
    変数内の位置付けでは、
    変数を宣言する前に、初期化せずに使用できます.
    変数では,初期化を行うかどうかが重要であるようである.
    初期化はよく理解できないが,例では変数を用いた実行点(コンテキスト)に関連していると考えられる.