HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 3기 교육생
/
😃
나영팀
/
스코프 체인

스코프 체인

발표일
Nov 7, 2022
작성자
박민형
스코프 체인
스코프
  • 식별자 의 유효범위
  • 스코프가 필요한 이유
    • 같은 변수명끼리 값을 받아 오는 것에 있어 충돌을 방지
    • 효율적 메모리 관리, 코드 블럭 안에 참조값 들은 실행 될 때만 메모리에 할당되는 것이 효율적
  • 스코프는 필요한 영역에 한정하여 유효 범위가 좁을수록 좋다.
스코프 체인
  • 자신이 속해있는 지역의 변수들을 참조할 수 있고 만약 그 참조값이 없다면 상위 레벨의 스코프로 올라가면서 해당 참조 값을 찾는 것
  • 전역 스코프에도 찾는 참조 값이 없다면 null 반환
let value = "전역 스코프"; function a() { let value = "a 스코프"; b(); function b() { let value = "b 스코프"; c(); function c() { let value = "c 스코프"; console.dir(c); console.log(value); } } } a(); // 기존 => "c 스코프" // c 함수 스코프에 value가 없다면 => "b 스코프" // b 함수 스코프에 value가 없다면 => "a 스코프" // a 함수 스코프에 value가 없다면 => "전역 스코프" // 전역 스코프에 value가 없다면 => ReferenceError: value is not defined
  • 스코프 체인 확인 ⇒ 자신의 스코프를 제외한 자신과 가장 가까운 변수 객체의 모든 스코프
function a() { console.dir(a); b(); function b() { console.dir(b); c(); function c() { console.dir(c); } } } a();
notion image
 
정적 / 렉시컬 스코프(Static / Lexical Scope)
  • 함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정된다.
let greet = 'Hello'; function sayHi() { let greet = 'Hi'; print(); } function print() { console.log(greet); } sayHi(); // 예상: "Hi" | 출력값: "Hello" print(); // 예상: "Hello" | 출력값: "Hello"