[JS]let、const、varの違い


ES 6以前のjavascriptでは、変数を宣言するテーブルにvarが使用されていました.
ES 6から出現する変数宣言キーワードlet,constの違いを整理する.
var
1. Hoisting
変数宣言と初期化ステップを最上位レベルに引き上げます.
console.log(apple) // => undefined, 함수의 선언 및 초기화가 호이스팅에의해 최상위로 끌어올려짐

var apple ="red"
2.関数レベルスキャン
JavaScriptでは、コードブロック(if、for、while、try/catchなど)が領域スキャンを作成します.ただし、varを使用して宣言された変数は함수 레벨 스코프만 지역 변수로 인정のみであり、他のコードブロックではグローバルスキャンに従ってグローバル変数とみなされる.
var fruit = 'apple';

function func() {
  var fruit = 'banana';
  return fruit;
}

console.log(func()); // => banana
console.log(fruit); // => apple

if (true) {
  var fruit = 'peach'; //var는 if를 지역스코프로 보지 않기때문에 전역변수가 선언된다.
}

console.log(fruit); // => peach
 
3.繰り返し宣言と再割当
var fruit = 'apple'

var fruit = 'banana'
console.log(fruit) //=> banana

fruit = peach
console.log(fruit) //=> peach
let, const
*Let、constも首を吊るって言った!
1.let,constのscope
すべてのコードブロック(if、for、while、try/catchなど)を領域スキャンと認定するブロックレベルスキャンに従う.
let apple = 'red'

if (true) {
let apple = 'sweet'
console.log(apple) //=> sweet
}

console.log(apple) //=> red
2.letの宣言、割り当て
letは繰り返し宣言することはできません.再割り当てできます.
let apple;  //=> undefined, 변수 선언후 초기화가 진행된다. 선언과 할당을 동시에 해도 된다.
apple = 'sweet' // 값을 재할당 할 수 있다.
let apple = 'tree' //=> SyntaxError: Identifier 'a' has already been declared
3.constの宣言、割り当て
constを使用する変数は、中目宣言も再割り当てもできません.
例外として、オブジェクト(配列を含む)にはアドレス値があるため、オブジェクトの値をさらに削除できます.
またletとは異なり、宣言と割り当てを同時に行う必要があります.
const banana; // SyntaxError: Missing initializer in const declaration

const apple = 'red'
apple = 'sweet' // TypeError: Assignment to constant variable.

const arr = [1, 2]
arr = [1, 2, 3, 4] //TypeError: Assignment to constant variable. 재할당은 불가능!!

arr.push(3, 4) //배열의 주소값이 그대로일경우 수정가능

console.log(arr) //=> [1, 2, 3, 4]