호이스팅, 스코프

2023. 8. 14. 11:40·프로그래밍 언어/javascript
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
반응형
저작자표시 (새창열림)

'프로그래밍 언어 > javascript' 카테고리의 다른 글

실행 컨텍스트  (0) 2023.08.14
javascript 특징  (0) 2023.08.14
JIT 컴파일러  (0) 2023.08.14
javascript engine과 runtime  (1) 2023.08.14
javascript(자바스크립트) 기초, 개발 환경 구축, 기초 함수 소개  (1) 2022.02.15
'프로그래밍 언어/javascript' 카테고리의 다른 글
  • 실행 컨텍스트
  • javascript 특징
  • JIT 컴파일러
  • javascript engine과 runtime
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    오블완
    Git
    무료IT교육
    Query
    Database
    SW
    언어
    백준
    dp
    코딩이러닝
    spring boot
    객체지향
    IT교육
    무료코딩교육
    gitlab
    git branch
    BFS
    python
    코딩강의
    빅오표기법
    MongoDB
    대외활동
    Java
    mysql
    SWEA
    코드프레소
    티스토리챌린지
    codepresso
    개념
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
호이스팅, 스코프
상단으로

티스토리툴바