YunHyeong 2022. 5. 17. 11:42

Scope

스코프는 그 자체로 ‘범위’라는 뜻을 가지고 있다. 자바스크립트에서 스코프는 ‘어떤 변수에 접근할 수 있는 유효범위’이다.

 

전역 scope를 사용했을 때 장단점에 관해 설명해주세요.

  • 단점 :
    1. 변수의 유효 범위가 크면 클 수록 코드의 가독성 문제가 발생할 수 있다.
    2. 전역 scope는 생명 주기가 길기 때문에 메모리 상에서 오랜 시간 유지되며 상태 변경에 의한 오류가 발생할 수 있다.
    3. 스코프 체인상에서 가장 종점에 존재하기 때문에 가장 마지막에 검색이 되며 검색 속도가 가장 느리다.
  • 장점 : 코드 상에서 어디에서나 접근할 수 있다.

일반적으로 웹 사이트의 전역 스코프를 그대로 두고 건드리지 않는 것이 좋은 이유는 무엇인가요?

  • 전역 스코프는 코드 상 어디에서든 접근할 수 있으므로 다른 블록에서 변수 명이 겹칠 수 있고, 전역 스코프의 상태를 다른 블록내에서 계속 변경시키면 의도치 않은 결과를 얻을 수 있다.

Hoisting

호이스팅은 var나 function 선언문 등을 실행 단계에서 해당 scope의 맨 위로 옮기는 것이다.

 

호이스팅은 어떤 단계로 실행되나요?

  • 첫 번째 선언단계에서는 변수를 실행 컨텍스트의 변수 객체에 등록하고, 스코프가 참조하는 대상으로 만든다. 그리고 두 번째 초기화 단계에서는 변수 객체에 등록된 변수를위한 메모리 공간을 확보하고, undefined로 초기화 한다. 그리고 마지막으로 할당 단계에서는 undefined로 초기화된 변수에 실제 값을 할당한다.

var, let, const의 차이점을 설명하세요

  • var는 함수 단위 스코프이기 때문에 블록과 관계없이 접근이 가능하며, 중복 선언이 가능하다. 이때 마지막에 선언된 값이 변수에 할당된다. 이와 달리 letconst는 블록 단위 스코프이며 중복선언이 불가능하다. letconstvar에 비해 코드의 안정성을 높여줄 수 있다. 그리고 varlet은 재할당이 가능하지만 const는 재할당이 불가능하다.