[JavaScript] var, let, const


1.varキーワードとして宣言された変数の問題


1-1. 変数の繰り返し宣言を許可


varキーワードで宣言された変数は、繰り返し宣言できます.

1-2. かんすうレベルそうさ


varキーワードとして宣言された変数は、関数のコードブロックが領域コードブロックであることのみを認めます.したがって,関数外部でvarキーワードとして宣言された変数は,コードブロック内で宣言してもグローバル変数となる.

1-3. へんすうかそく


varキーワードで変数を宣言すると、変数エスケープは変数宣言文をscopeのフロントエンドに昇格させます.すなわち、変数シースによってvarキーワードとして宣言された変数は、変数宣言文の前に参照することができる.ただし、代入文の前に変数を参照すると、常に未定義を返します.

2.letキーワード


前述したvarキーワードの欠点を補うために、ES 6は新しい変数宣言キーワードletとconstを導入した.varキーワードとの違いを中心にletキーワードを表示します.

2-1. 繰り返し宣言変数の禁止


letキーを使用して同じ名前の変数を繰り返し宣言すると、構文エラーが発生します.

2-2. ブロックレベルスキャン


letキーワードとして宣言された変数は、すべてのコードブロック(関数、if文、for文、while文、try/catch文など)をゾーンスキャンプログラムとして認定するブロックレベルのスキャンプログラムに従います.

2-3. へんすうかそく


varキーワードで宣言される変数とは異なり、letキーワードで宣言される変数の動作は変数エスケープが発生しないようにします.
letキーワード宣言の変数は、宣言フェーズと初期化フェーズで別々に行われます.すなわち、javascriptエンジンは、実行時の前に宣言フェーズを最初に実行しますが、初期化フェーズは変数宣言に達すると実行されます.
letキーワード宣言の変数はエスケープされないように見えます.しかし、事実はそうではない.
let foo = 1; // 전역 변수

{
  console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
  let foo = 2; // 지역 변수
letキー宣言を使用する変数では、変数反発が発生しない場合、上記の例ではグローバル変数fooの値を出力する必要がありますが、letキー宣言を使用する変数では反発が発生するため、参照エラーが発生します.
JavaScript ES 6から導入されたlet、constなど、すべての宣言(var、let、const、function、classなど)をサポートします.しかし、ES 6に導入されたlet、const、classの宣言文を使用すると、動作はエスケープが発生しないようになります.

3.constキーワード


constキーワードは定数を宣言するために使用されます.しかし、必ずしも定数だけで使用されるとは限らない.

3-1. 宣言と初期化


constキーワードとして宣言された変数は、宣言と同時に初期化する必要があります.
const foo = 1;

3-2. 再割り当ての禁止


3-3. ていすう


contキーとして宣言された変数に元の値が割り当てられている場合、元の値は変更できない値であり、contキーによる再割り当ては禁止されているため、割り当てられた値は変更できません.
定数は、ステータスのメンテナンス、読み取り可能性、メンテナンスを容易にするために積極的に使用する必要があります.

3-4. constキーワードとオブジェクト


contキーワードとして宣言された変数に元の値が割り当てられている場合は、その値は変更できません.ただし、constキーにオブジェクトを割り当てる場合は、宣言して値を変更することもできます.変更できない元の値は、再割り当てなしで変更することはできませんが、変更された値のオブジェクトとして再割り当てを必要とせずに直接変更できます.
const person = {
  name: 'Lee'
};

// 객체는 변경 가능한 값이다. 따라서 재할당 없이 변경이 가능하다.
person.name = 'Kim';

console.log(person); // {name: "Kim"}
constキーワードは再割り当てのみが禁止されており、「変わらない」という意味ではありません.すなわち、新しい値を再割り当てすることは不可能ですが、property値を動的に作成、削除、または変更することでオブジェクトを変更できます.オブジェクトが変更された場合、変数に割り当てられた参照値は変更されません.

4.終了


変数宣言ではconstがデフォルトで使用されますが、letは再割り当てが必要な場合にのみ使用することが望ましいです.constキーを使用すると、予期せぬ再割り当てを防止できるため、より安全です.
  • ES 6を使用する場合、varキーワードは使用されません.
  • letキーは、
  • の再割り当てが必要な場合にのみ使用されます.この場合、変数のスキャンはできるだけ狭くなります.
  • の変更が発生せず、読み取り専用(再割り当てを必要としない定数)の元の値とオブジェクトについてconstキーを使用します.constキーワードは再割り当てが禁止されているため、var、letキーワードよりも安全です.
  • リファレンス


    モダンjavascript deep dive