JSTS

[JS][ES6] const, let

Jaaaay 2022. 6. 5. 23:23

Babel을 사용하여 ES6 문법으로 코드를 작성 후 ES5로 변환해주어 호환성을 보장하는 방식이 주로 쓰인다.


let

: let은 블록단위에서 사용 가능한 변수 선언이다.

var name = "global var";

function home(){
  var homevar = "homevar";
  for(let i=0; i<100; i++){}
  console.log(i);
}

home();

// for 문 속에서 i를 선언했기 때문에 오류 발생

Closure 변수 문제를 let으로 해결

var list = document.querySelectorAll("li");
for(let i=0; i<list.length;i++){
  list[i].addEventListener("click", function(){
    console.log(i+"번째 리스트입니다.")
  });
}

// var로 변수를 선언할 경우 closure 변수 i가 4로 된 결과를 모두 공유하기 때문에 원하는 결과를 얻을 수 없다. 
// 이때 let을 사용하면 i를 지역변수화해서 문제 해결 가능

const

: constant, 원래 바뀌지 않는 값을 대문자 표기법으로 변수를 선언해 표시해줬는데 이제 const라는 변수 선언 방법이 생겼다.

const는 재할당하는 경우에 오류가 발생한다.

전략

  • const를 기본으로 사용한다.
  • 변경이 될 수 있는 변수는 let을 사용한다.
  • var는 사용하지 않는다.

const 특성과 immutable array

: const를 사용하더라도 배열과 오브젝트의 값을 변경하는 것은 가능하다.

function home() {
  const list = ["apple","orange","watermelon"];
  list.push("banana");
  console.log(list);
}

home();

>> ["apple", "orange", "watermelon", "banana"]

immutable array는 어떻게 만들까?

const list = ["apple","orange","watermelon"];
list2 = [].concat(list, "banana");
console.log(list, list2);
console.log(list === list2);

>> ["apple", "orange", "watermelon"]
>> ["apple", "orange", "watermelon", "banana"]
>> false

concat을 사용하여 새로운 array를 만들어 사용한다.

'JSTS' 카테고리의 다른 글

[JS][ES6] Arrow function, defualt parameter, rest parameter  (0) 2022.06.05
[JS][ES6] Template 처리  (0) 2022.06.05
[JS][ES6] set, map  (0) 2022.06.05
[JS][ES6] 객체, destructuring  (0) 2022.06.05
[JS][ES6] string, for of, from, spread  (0) 2022.06.05