[모던 JavaScript 튜토리얼] - [6.4] 오래된 var(var)

IRISH·2024년 2월 3일
0

JS

목록 보기
61/80

학습 내용

var로 선언한 변수는 let이나 const로 선언한 변수와 다른 두 가지 주요한 특성을 보입니다.

  1. var로 선언한 변수는 블록 스코프가 아닌 함수 수준 스코프를 갖습니다. ⇒ 즉, var는 블록 스코프가 없음
  2. var는 변수의 중복 선언을 허용합니다.
var user = "Pete";

var user = "John"; // 이 "var"는 아무것도 하지 않습니다(이전에 이미 선언됨).
// ...에러 또한 발생하지 않습니다.

alert(user); // John
  1. var 선언은 함수가 시작되는 시점(전역 공간에선 스크립트가 시작되는 시점)에서 처리됩니다.

var만의 특성은 대부분의 상황에서 좋지 않은 부작용을 만들어냅니다. let이 표준에 도입된 이유가 바로 이런 부작용을 없애기 위해서입니다. 변수는 블록 레벨 스코프를 갖는 게 좋으므로 이제는 let과 const를 이용해 변수를 선언하는 게 대세가 되었습니다.

실습 코드

/* var는 블록 스코프가 없음 */
if (true) { //
    var test1 = true; // 'let' 대신 'var'를 사용했습니다.
}

console.log(test1); // true(if 문이 끝났어도 변수에 여전히 접근할 수 있음)

if (true) {
let test2 = true; // 'let'으로 변수를 선언함
}

console.log(test2); // Error: test is not defined

// -----------------------------------------------------
function sayHi() {
    var phrase; // 선언은 함수 시작 시 처리됩니다.
  
    console.log(phrase); // undefined
  
    phrase = "Hello"; // 할당은 실행 흐름이 해당 코드에 도달했을 때 처리됩니다.
}
  
sayHi();

느낀점

이전에 변수 선언시 배웠던 종류[const, let, var]에서 가급적 var이 아닌 let을 사용하라는 글을 읽었다. 당시에도, var는 구식 변수 선언 형태여서 위험한 존재라고 배웠다.

하지만, 정확한 이유를 모르고 단지 위험하다는 말 하나 때문에 var이 아닌 let을 사용했었는데 오늘 드디어 그 이유를 알게 되었다.

실무에서 나는 JS 코드를 짤 때 var이 아닌 let 또는 const를 사용해서 변수 선언을 하고 있다. 하지만, 조금 거슬리는 것(?)은 의외로 실무에도 let이 아닌 var가 많이 사용되고 있다는 점이다.
내가 지금 참여하는 실무 프로젝트는 약 5년 전에 다른 회사에서 만든 것을 토대로 구현되고 있다. 따라서, 이 때 만들어진 것은 충분히 let이 아닌 var로 구현됐을 수 있다고 생각한다.

하지만, var의 위험성을 알게 된 이상, 앞으로는 기존에 존재했던 코드 중 var를 let으로 변환해서 안전한 시스템을 만들어야겠다라는 생각이 든다. (근데… var이 너무 많다 ;;; 이걸 다 언제 바꾸나 ㅎㅎ)

profile
#Software Engineer #IRISH

0개의 댓글