[JavaScript] var과 let

2023. 2. 10. 22:34FE/JavaScript

 

1. 결론

생활코딩 강의를 봅시다. (https://youtu.be/61iolhWgQt0)

생활코딩 유튜브

 

결론은 var보단 let을, 가능하다면 const를 사용하자.

 


2. 이유

var let const

  var let const
global O X X
script scope X O O
function local scope O O O
block scope X O O
재선언 O X X
재할당 O O X

 

const는 값을 재할당 할 수 없다.

 

이를 제외하면 let과 동일하게 작동한다.

 

중요한 것은 var과 let의 차이다.

 

우선 var을 사용하면 다음과 같은 문제가 생긴다.

 

  1. 재할당이 가능하다.
  2. block scope를 무시한다.
  3. script scope를 무시한다.

 


a. 재할당이 가능하다.

 

var은 재할당이 가능하다.

 

그래서 아래와 같은 상황이 발생한다.

 

var a = 1;
var a = 2; // 가능!

let b = 1;
let b = 2; // 에러!

 


b. block scope를 무시한다.

 

var은 block scope를 무시한다.

 

그로 인해서 다음과 같은 문제가 발생한다.

 

var a = "global a";
let b = "global b";
console.log(a); // global a
console.log(b); // global b

{
    var a = "block a";
    let b = "block b";
    console.log(a); // block a
    console.log(b); // block b
}

console.log(a); // block a <- ??????????
console.log(b); // global b
var a = "global a";
console.log(a); // global a

for(var a = 0; a < 1; a++){
	console.log(a); // 0
}

console.log(a); // 1 <- ??????????


c. script scope를 무시한다.

 

어쩌면 b에 비해서는 작은 문제일 수 있다.

 

보통 script scope에 변수를 포함시키면 복잡한 global scope에 위치시킨 경우보다 변수를 조회하기 쉽고 빠르다. (global scope가 복잡한 것도 있고 script scope를 우선적으로 탐색하는 것도 있다.)

 

그런 성능적인 면에서 var보단 let이 우월하다.

 


그냥 let 쓰자.

'FE > JavaScript' 카테고리의 다른 글

[JavaScript] destructuring operator  (0) 2023.03.27
[Javascript] async & await  (0) 2023.03.01
2022-08-22 JS_6  (0) 2022.08.22
2022-08-18 JS_5 (배열, 반복문, 콘솔, 함수)  (0) 2022.08.19
2022-08-16 JS_4  (0) 2022.08.17