본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
250809(토) 40일차
개념과 구조 - 라이프 사이클과 스코프
세 가지 스코프 – 전역, 함수, 블록
JavaScript에서 스코프는 아래 세 가지로 나뉜다
- 전역 스코프(Global) – 애플리케이션 실행 시 생성, 종료 시 사라짐
- 함수 스코프(Function) – 함수가 호출될 때 생성, 종료되면 소멸
- 블록 스코프(Block) – 코드 블록 진입 시 생성, 블록을 벗어나면 소멸
let myName = "Kim"; // 전역 스코프
function foo() {
let x = 10; // 함수 스코프
if (x === 10) {
let y = 100; // 블록 스코프
console.log(y);
}
}
블록이 단순히 선언된다고 스코프가 생기는 것이 아니라 블록에 진입해야 스코프가 활성화됨
라이프사이클
변수와 함수는 스코프가 만들어질 때 함께 생성되고 스코프가 사라질 때 함께 소멸된다
이러한 구조는 메모리 자원을 효율적으로 관리하기 위한 것으로
불필요한 데이터를 무한히 메모리에 유지하지 않도록 설계된 자바스크립트의 핵심 원칙
스코프 탐색 규칙
스코프는 중첩(nested) 구조를 가지며 안쪽 스코프에서는 바깥쪽 스코프의 변수에 접근 가능하지만
바깥쪽에서는 안쪽 스코프에 접근할 수 없다
let outer = "out";
function foo() {
let inner = "in";
console.log(outer); // 가능
}
console.log(inner); // ReferenceError
이러한 탐색 규칙은 프로토타입 체이닝과 유사한 메커니즘을 가지고 있어
가장 가까운 스코프부터 바깥으로 점차 탐색한다
호이스팅
자바스크립트는 실행 전에 모든 함수 선언과 변수 선언을 스코프 최상단으로 끌어올린다
이것을 호이스팅이라고 하며 다음과 같은 특성을 가진다
- 함수 선언문은 전체가 호이스팅됨 → 어디서든 호출 가능
= 함수 표현식 / 변수(let, const)은 선언만 호이스팅되고 초기화는 안 됨 → 사용 불가
bar(); // 가능
function bar() {}
baz(); // 에러
const baz = function () {};
이 때문에 실무에서는 항상 선언 → 호출 순서를 명확하게 지키는 습관이 중요
이번 강의에서는 변수와 함수가 어디에서 생성되고 언제 소멸되는지에 대한 스코프와 라이프사이클 개념을 배웠다
단순히 블록을 나누는 개념이 아니라 실행 시점과 메모리 효율성까지 관여하는 깊은 개념이라는 점을 실감할 수 있었다