프로그래밍 언어/javascript

호이스팅, 스코프

pink_salt 2023. 8. 14. 11:40
728x90

스코프

  • 스코프는 어떤 변수가 선언된 공간 또는 환경을 말합니다.
    • 어떤 변수의 스코프는 해당 변수가 접근될 수 있는 범위입니다.
    • 참고 : 'strict mode' 쓰면 js 가 원칙대로 실행될 수 있도록 원한다면 넣으면 에러에 대해서 제대로 확인할 수 있다.
  • 글로벌 스코프(전역 스코프)
    • 함수나 블록 바깥에 선언된 변수
    • 어디에서든지 접근 가능

  • 함수 스코프
    • 함수 안쪽에서만 접근 가능한 변수
    • 지역 스코프라고도 불린다.

  • 블록 스코프(ES6)
    • 블록 ({}) 안에서만 접근 가능하다.
    • let, const 에만 적용
    • 함수도 블록 스코프!

스코프 체인

  • 하위 스코프는 상위 스코프를 스코프 체인을 통해 변수를 참조해서 사용할 수 있다.
  • 스코프 체인(scope chain)은 함수의 감춰진 프로퍼티인 [[Scope]]로 참조할 수 있다.

console.dir()을 사용하면, 개발자 도구로 쉽게 확인이 가능하다.

호이스팅

  • 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것입니다.
    • var와 함수 선언문은 호이스팅이 일어나고
    • const, let, 함수 표현식은 호이스팅이 일어나지 않습니다. (더 안전하다.)
      • why?
if(!numProducts) deleteShoppingCart(); var numProducts = 10; function deleteShoppingCart() { console.log('모든 상품 삭제'); // 왜 실행?? numProducts 가 undefined, var를 쓰지 말아라 }
 

이때 호이스팅이 발생해서 numProducts가 선언된 상태가 이미 되어버려 undefined가 되고

falsy한 값이기 때문에 deleteShoppingCart()가 실행되어서 모든 상품 삭제가 찍히게 된다.

초기화 되기 전에 실행되는 것을 막기 위해 쓴다!

 
호이스팅?
초기값
스코프
함수 선언식
YES
실제 함수
블록
var 변수
YES
undefined
함수
let, const 변수
NO
uninitialized
블록
함수 표현식, 화살표 함수
var를 쓰는지, let,const를 쓰는지에 따라 다르다.
 
728x90
반응형