Javascript/ES6

스코프, let, const

dongling 2024. 6. 12. 21:41
728x90
SMALL

 요약

  • 스코프란?
    • 식별자에 접근할 수 있는 범위
    • 스코프 종류 : 블록 스코프, 함수 스코프
  • var, let, const, this 키워드
  • 호이스팅
    • 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
    • var 변수 호이스팅 → undefined로 변수 초기화
    • let, const 변수 호이스팅 시 → 변수 초기화 X

⚡ 스코프 (Scope)

  • 정의 : “식별자 접근 규칙에 따른 유효 범위”
  • 식별자(변수, 함수, 클래스)에 접근할 수 있는 범위가 존재
  • 범위는 중괄호(블록) 또는 함수에 의해 나눠짐
  • 그 범위를 스코프라고 부름
  • 각각을 Block Scope와 Function Scope

⚡ 스코프 주요 규칙

  1. 안쪽 스코프에서 바깥쪽 스코프로 접근할 수 있지만 반대는 불가능하다.
  2. 스코프는 중첩이 가능하다.
  3. 전역 스코프와 지역 스코프
  4. 지역 변수(지역 스코프)는 전역 변수(전역 스코프)보다 우선순위가 더 높다.

⚡스코프의 종류

  • 블록 스코프, 함수 스코프
  • 화살표 함수는 함수 스포트가 아니다.

⚡블록 스코프

  • 블록을 나타내는 중괄호 { }
  • { } 안과 밖의 변수 이름이 같더라도 스코프가 다르므로 변수가 선언되고 각 변수에 할당된 값이 대체되지 않고 유지됨

🔹 var 키워드

  • 변수의 구분 - 로컬 변수, 글로벌 변수
    • 구분 이유 : 스코프(scope)
  • 로컬 변수는 함수 또는 오브젝트를 스코프로 사용하려는 의도
  • 글로벌 함수는 프로그램 전체에서 공요으로 사용하려는 의도

🔹 let 키워드

  1. 함수 안에 작성한 let 변수는 함수가 스코프
    • 변수는 함수가 스코프가 아니라 if 문의 블록 {}이 스코프
  2. ex) if(a=b) { let sports = “축구” }
  3. 블록 밖에 같은 이름의 변수가 있어도 스코프가 다르므로 변수 각각에 값을 설정할 수 있으며 변수 값이 유지됨

🔹 const 키워드

  • 변수에 할당된 값을 변경할 수 없음
  • 선언만 할 수 없으며, 초깃값을 할당해야 함

🔹 this 키워드

  • 글로벌 오브젝트를 참조
  • 글로벌 오브젝트가 window 오브젝트는 아니지만, window 오브젝트로 글로벌 변수에 접근할 수 있음
  • 자바스크립트에 글로벌 오브젝트는 있지만 window 오브젝트는 없다.
  • window 오브젝트에는 DOM메서드도 있고 window 오브젝트 자체의 프로퍼티도 있다.
  • window 오브젝트에 글로벌 오브젝트가 존재하는 개념

🔹 function

  • 함수도 스코프를 가지므로 하나의 블록 스코프다.
  • 함수에 선언된 모든 변수가 함수 스코프에 속한다.

🔹 try-catch

  • try 블록 {} 기준으로 블록 스코프를 갖는다.
  • catch 블록은 스코프를 갖지 않으며 try 블록 스코프에 속한다.

🔹 switch-case

  • switch 블록이 블록 스코프
  • switch 안의 case는 별도의 스코프를 갖지 않으며 switch의 스코프에 속한다.

🔹 for()

  • for문에서 let 변수를 반복할 때마다 스코프를 갖는 반면, var 변수는 스코프를 가지지 않음

📎 호이스팅

함수 선언문은 함수를 호출하는 코드를 위에 작성하고 호출된 함수를 아래에 작성해도 함수가 호출되는 것을 “호이스팅”이라고 한다.

  • var 변수
    • 함수 선언문과 차이가 있음.
    • 변수를 사용하는 코드를 위에 작성하고 아래에 변수를 선언해도 에러가 나지 않음
  • let 변수
    • 호이스팅이 되지 않음
    • let 변수를 사용하는 코드를 위에 작성하고 아래에 변수를 선언하면 에러 발생
728x90
LIST