let、const、ブロックレベルスキャン


poiemawebを参照
let、const、ブロックレベルスキャン
varキーワードとして宣言された変数の問題
  • 変数の繰り返し宣言を許可
  • では、予期せぬ先に宣言された変数値が変化する副作用が発生します.
  • 関数レベルスキャン
  • varキーワードとして宣言された変数は、関数のコードブロックが領域scopeであることのみを認めます.
  • 関数の外部でvarキーワードとして宣言された変数は、コードブロック内で宣言されてもグローバル変数である.
  • 変数トランスコード
  • 変数宣言の前を参照してください.
  • letキーワード
    varキーワードの欠点を補うために、ES 6は新しい変数宣言キーワードletとconstを導入した.
  • 変数重複宣言禁止
  • letキーワードを使用して同じ名前の変数を繰り返し宣言すると、構文エラーが発生します.
  • ブロックレベルスキャン
  • すべてのコードブロック(関数、if文、for文、while文、try/catch文など)は、領域スキャンで認可されたブロックレベルスキャン(block-level scope)に従います.
  • 変数トランスコード
  • 「宣言フェーズ」と「初期化フェーズ」は別々に行われる.
  • letキーワードで宣言された変数は、scopeの開始点から初期化フェーズの開始点(変数宣言)まで変数を参照できません.
  • let、const、classの宣言を使用して、動作はエスケープが発生しないようにします.
  • // 런타임 이전에 선언 단계가 실행된다. 아직 변수가 초기화되지 않았다.
    // 초기화 이전의 일시적 사각 지대에서는 변수를 참조할 수 없다.
    console.log(foo); // ReferenceError: foo is not defined
    
    let foo; // 변수 선언문에서 초기화 단계가 실행된다.
    console.log(foo); // undefined
    
    foo = 1; // 할당문에서 할당 단계가 실행된다.
    console.log(foo); // 1
    グローバルオブジェクトとlet
    varキーで宣言されたグローバル変数とグローバル関数、および宣言されていない変数に値を指定するデフォルトのグローバルは、グローバルオブジェクトウィンドウのPropertyになります.グローバルオブジェクトのプロパティを参照する場合は、ウィンドウを省略できます.
     // 이 예제는 브라우저 환경에서 실행해야 한다.
    
    // 전역 변수
    var x = 1;
    // 암묵적 전역
    y = 2;
    // 전역 함수
    function foo() {}
    
    // var 키워드로 선언한 전역 변수는 전역 객체 window의 프로퍼티다.
    console.log(window.x); // 1
    // 전역 객체 window의 프로퍼티는 전역 변수처럼 사용할 수 있다.
    console.log(x); // 1
    
    // 암묵적 전역은 전역 객체 window의 프로퍼티다.
    console.log(window.y); // 2
    console.log(y); // 2
    
    // 함수 선언문으로 정의한 전역 함수는 전역 객체 window의 프로퍼티다.
    console.log(window.foo); // ƒ foo() {}
    // 전역 객체 window의 프로퍼티는 전역 변수처럼 사용할 수 있다.
    console.log(foo); // ƒ foo() {}
    letキーワードが宣言するグローバル変数は、グローバルオブジェクトのプロパティではありません.ダイアログを呼び出すfooのように近づくことはできません.letグローバル変数は、非表示の概念ブロックに存在します.
    constキーワード
    contキーワードは定数を宣言するために使用されます.しかし、必ずしも定数だけで使用されるとは限らない.
    宣言と初期化
    constキーワードとして宣言された変数は、宣言と同時に初期化する必要があります.
    const foo = 1;
    const bar;  // SyntaxError: Missing initializer in const declaration
    letキーワード宣言の変数と同様に、ブロックレベルのスキャンがあり、変数エスケープが発生しないように動作します.
    再割り当ての禁止
    varまたはletキーワードとして宣言された変数は自由に再割り当てできますが、constキーワードとして宣言された変数は再割り当てできません.
    変数の相対概念定数とは、再割り当てを禁止する変数を指す.
  • は通常、定数の名前を大文字で宣言し、定数を明確に表す.複数の単語で構成されている場合は、一般的に後半得点()で表される.
  • 定数を使用すると、可読性と保守性が向上します.
  • constキーワードとオブジェクト
    contキーワードとして宣言された変数に元の値が割り当てられている場合は、その値は変更できません.(contキーとして宣言された変数に元の値が割り当てられている場合、元の値は可変値であり、contキーによる再割り当ては禁止されているため、割り当てられた値は変更できません.)
    ただし、constキーとして宣言された変数にオブジェクトを割り当てると、この値を変更できます.
    なぜなら、値を変更可能なオブジェクトとして再割り当てを必要とせずに直接変更できるからである.
    したがってconstキーワードは再割り当てのみが禁止され、「変わらない」という意味ではありません.
    var vs. let vs. const
  • ES 6を使用する場合、varキーワードは使用されません.
  • letキーは、
  • の再割り当てが必要な場合にのみ使用されます.この場合、変数のスキャンはできるだけ狭くなります.
  • の変更が発生せず、読み取り専用(再割り当てを必要としない定数)の元の値とオブジェクトについてconstキーを使用します.constキーワードは再割り当てが禁止されているため、var、letキーワードよりも安全です.