TIL

190513_TIL(rubber-duck)

  • var 키워드로 선언한 변수의 문제점
    • 같은 스코프 내에서 중복 선언이 허용된다.
    • 블록 레벨 스코프를 지원하지 않는다.(함수 레벨 스코프)
    • 변수 호이스팅
  • 전역 변수의 문제점
    • 암묵적 결합
      • 모든 코드가 전역 변수를 참조하고 변경할 수 있다.
      • 코드의 가독성이 나빠지고 의도치 않게 상태가 변경될 수 있는 위험성도 높아진다.
    • 긴 생명 주기
      • 전역 변수의 상태를 변경할 수 있는 시간이 길다.
      • 메모리 리소스를 오랜 기간 소비한다.
    • 스코프 체인 상에서 종점에 존재
      • 변수를 검색할 때 전역 변수가 가장 마지막에 검색 된다.
      • 즉, 전역 변수의 검색 속도가 가장 느리다.
    • 네임 스페이스 오염
      • 파일이 분리되어 있다하여도 하나의 전역 스코프를 공유한다.
      • 다른 파일 내에서 동일한 이름으로 명명된 변수나 함수가 같은 스코프 내에 존재할 경우 예상치 못한 결과를 가져올 수 있다.
  • var, let , const 키워드의 차이점

    • var 키워드는 선언과 초기화(undefined를 변수에 할당) 가 동시에 이루어진다. (런타임 ) –> 변수 호이스팅
    • letconst 키워드는 런타임 전 선언되고 런타임에 초기화 된다. –> 마치 변수 호이스팅이 일어나지 않는 것처럼 보인다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    console.log(varTest); // undefined

    var varTest = 'test1';

    console.log(letTest); // Uncaught ReferenceError: Cannot access 'letTest' before initialization

    let letTest = 'test2';

    console.log(constTest); // Uncaught ReferenceError: Cannot access 'letTest' before initialization

    const constTest = 'test3';
    • var 키워드와 let 키워드는 재할당이 가능하지만 const 키워드는 재할당이 불가능하다.
    1
    2
    3
    const age = 20;

    age = 30; // Uncaught TypeError: Assignment to constant variable.
  • const 키워드는 반드시 선언과 할당을 하나의 문에 하여야 한다.

    1
    2
    3
    const name; // Uncaught SyntaxError: Missing initializer in const declaration

    const name = 'Lee'; // (o)
Share