💡 아래 내용은 모던 자바스크립트 딥다이브를 공부하며 이해했던 내용을 다루고 있습니다. 혹시 틀렸거나 잘못된 정보가 있다면 알려주세요!
스코프는 변수, 함수, 객체 등의 접근 가능 범위와 생명 주기를 결정하는 개념입니다. 즉, 어떤 변수에 접근할 수 있는지, 언제 그 변수가 메모리에서 해제되는지를 결정합니다.
전역 스코프, 함수 스코프(함수 내에서 접근), 블록 스코프(let, const 변수는
{}
안에서만 접근)가 있습니다.
코드의 가장 바깥 영역을 뜻하며, 코드 내 어디서든 접근할 수 있는 스코프입니다.
함수 스코프나 블록 스코프 내를 의미하며, 해당 코드 블럭 외부에서는 접근할 수 없습니다.
JS에서 변수, 함수 등의 유효 범위를 결정하는 매커니즘입니다. 스코프 체인은 실행 컨텍스트의 생성 과정 중에 생성되며, 가장 내부 스코프부터 시작해서 외부로 이어집니다. 이렇게 연결된 스코프의 체인을 스코프 체인이라고 합니다.
스코프 체인은 자바스크립트의 렉시컬 스코핑(Lexical scoping)을 구현하는 중요한 메커니즘입니다. 이는 함수가 어디에서 호출되었는지가 아니라 어디에서 선언되었는지에 따라 상위 스코프를 결정한다는 개념을 의미합니다.
같은 이름의 로컬 변수와 전역 변수가 있을 때, 함수 내부에서는 스코프 체인에 의해 가장 가까운 로컬 변수가 참조됩니다. 만약 로컬 변수가 없다면 전역 변수가 참조됩니다.
함수 또한 변수와 동일하게 작동합니다.
변수가 자신이 선언된 함수 내부에서만 접근 가능하다는 것을 의미합니다.
변수의 유효 범위가 그 변수가 선언된 위치에 따라 결정되는 프로그래밍 언어의 특성을 말합니다. 이는 함수가 선언된 시점에서의 스코프 체인을 기억하고, 이 정보를 함수가 호출되는 어느 곳에서든 사용할 수 있게 합니다.
예를 들어, 함수 내부에서 다른 함수를 선언하면 내부 함수는 외부 함수의 변수에 접근할 수 있습니다. 이는 내부 함수가 외부 함수의 스코프를 상위 스코프로 인식하기 때문입니다.
let x = 10;
function outer() {
let y = 20;
function inner() {
console.log(x + y);
}
inner();
}
outer(); // 출력: 30