갈푸라떼
갈푸라떼는 개발중
갈푸라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • CS (0)
      • CSinfo (0)
    • Frontend (15)
      • HTML,CSS (1)
      • Javascript (2)
      • React (0)
      • React Hook (12)
    • Backend (0)
      • Python (0)
      • Node.js (0)
      • php (0)
    • DB (2)
      • MySQL (2)
      • BigQuery (0)
      • Mongodb (0)
    • Study (186)
      • JavaScript (72)
      • JavaScript(Clean code) (50)
      • Node.js (11)
      • HTML,CSS (13)
      • React (30)
      • TypeScript (10)
      • React-Native (0)
    • Error (2)
      • error (2)
    • Git (22)
      • Git (22)
    • Help Coding (4)
      • Useful websites (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • Github

공지사항

인기 글

태그

  • 함수
  • Babel
  • 호이스팅
  • 실행 컨텍스트
  • 스코프 체인
  • 심볼
  • ECMAScript
  • prototype
  • 싱글스레드
  • 인터프리터
  • 컴파일러
  • 이터러블
  • nodemon
  • class
  • 프로토타입
  • 정적 레벨
  • SPREAD
  • 네이밍
  • symbol
  • 객체타입
  • 상속
  • PM2
  • function
  • structure
  • this
  • 자바스크립트엔진
  • 렉시컬 환경
  • 오버라이딩
  • 원시타입
  • Arrow

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갈푸라떼

갈푸라떼는 개발중

Study/JavaScript(Clean code)

[JavaScript][clean-code] var를 지양하자

2022. 5. 26. 14:13

* var를 사용을 지양하자.

  - let, const를 사용하자

 

* 왜 let, const를 사용해야 할까??

1. Scope (핵심)

  • var : 함수 스코프
  • let, const : 블록 스코프, Temporal Dead Zone(TDZ)속성을 가지고있음
    • 더 안전하다.
    • TDZ : 변수 선언 전에 변수를 호출 할경우 reference error 가 발생하는데 이때 tdz 에 걸렸다고 표현

 2. 재선언, 재할당

  • var : 재선언, 재할당이 가능하다.
    • 중복선언도 가능하다.
    • 따라서 코드가 길어지면 어떤값이 선언된건지 어떤값이 호출될지 예상이 되지않는다.
  • let : 재선언 불가능, 재할당은 가능
    • 따라서 안전하게 사용 가능
  • const : 재선언 및 재할당이 되지않음

* code로 확인하는 scope의 차이

 

* var 예시 코드

var global = '전역'

if(global === '전역') {
  var global = '지역';
  
  console.log(global); // 지역
}

console.log(global); // 지역
  • 기대 효과는 지역만 바뀌기를 바랬다.
  • 하지만 전역 공간에 있는 스코프까지 오염이 되었다.
  • var는 함수 단위 스코프이다. if는 블럭 단위 스코프이므로 var에 의해서 영향을 받는다.
  • 불안 요소를 계속 가지게 된다.

* let 예시 코드

let global = '전역'

if(global === '전역') {
  let global = '지역';
  
  console.log(global); // 지역
}

console.log(global); // 전역
  • 블럭 단위로 구분되어 자신의 역할을 정말 잘 수행하고 있다.
  • 안전하게 선언이 가능하다.
  • 전역공간에서는 합당한 값을 호출해준다.
  • 예상한 결과대로 나오는 결과를 만들어 낸다.

* 그렇다면 let, const중 무엇을 써야할까?

  - const를 사용하여라

  - const는 재할당만 금지된다.

  - 본연의 객체 그리고 배열 같은 래퍼런스 객체들을 조작 할 때는 이상이 없다.

 

// 선언 + 할당
const person = {
  name: 'hwang',
  age: '30'
}

// 재할당이 되지않는다. error발생
person = { 
  name: 'hwang2'
  age: '30'
}

// 값을 변경하는 방법
person.name = 'lee';
person.age = '22';

console.log(person); // { name: 'lee', age: '22' }
  • 재할당은 되지 않는다.
  • 재할당을 하지 않고 객체 내부의 값만 변경하는것은 가능하다.
const person = [{
  name: 'hwang',
  age: '30'
}]

person.push({
  name: 'lee',
  age: '22'
});

console.log(person); 
// [ { name: 'hwang', age: '30' }, { name: 'lee', age: '22' }]
  • 배열도 정상적으로 작동된다.

'Study > JavaScript(Clean code)' 카테고리의 다른 글

[JavaScript][clean-code] 호이스팅 주의하기  (0) 2022.05.26
[JavaScript][clean-code] 임시변수를 제거하자  (0) 2022.05.26
[JavaScript][clean-code] 전역 변수 사용 최소화  (0) 2022.05.26
[JavaScript][clean-code] 클린코드 리뷰 지적 사항  (0) 2022.05.26
[JavaScript][clean-code] JavaScript의 특성을 파악해야하는 이유  (0) 2022.05.24
    'Study/JavaScript(Clean code)' 카테고리의 다른 글
    • [JavaScript][clean-code] 임시변수를 제거하자
    • [JavaScript][clean-code] 전역 변수 사용 최소화
    • [JavaScript][clean-code] 클린코드 리뷰 지적 사항
    • [JavaScript][clean-code] JavaScript의 특성을 파악해야하는 이유
    갈푸라떼
    갈푸라떼

    티스토리툴바