취업 준비 !
[코드잇 풀스택 1기] - 렉시컬 스코프(Lexical Scope)
minsugar
2024. 7. 10. 20:50
Lexical Scope ?
렉시컬 스코프(Lexical Scope)는 소스 코드가 작성된 위치 기준으로 스코프라 결정되는 방식
코드가 작성된 시점에서 변수, 함수의 스코프가 정의
특성 정리 :
정적 스코핑 : 렉시컬 스코프는 코드 작성 시점에 스코프가 결정
함수 스코프 : js는 함수 레벨의 스코프를 가짐, 변수가 함수내에서 정의되면 그 함수 내부에서만 유효
블록 스코프 : let, const 가 도입되면서 블록 스코프 가능
let a = 10;
function outer(){
let b = 20;
function inner(){
let c = 30;
console.log(a); // 10
console.log(b); // 20
console.log(c); // 30
}
inner();
}
outer();
outer 함수는 a 변수에 접근 O
inner 함수는 a, b에 접근 O inner 가 outer 내부에 정의되어 있기 때문.
inner 함수는 c변수에도 접근 O, inner 내부에 정의 되어있기 때문
클로저
클로저는 함수와 함수가 선언된 렉시컬 환경의 조합을 의미, 클로저는 렉시컬 스코프를 기반으로 외부 함수의 변수에 접근할 수 있는 기능을 제공
function outer() {
let counter = 0;
function increment() {
counter++;
console.log(counter);
}
return increment;
}
const incrementCounter = outer();
incrementCounter(); // 1
incrementCounter(); // 2
incrementCounter(); // 3
increment 함수는 counter 변수에 접근 가능, increment가 정의된 렉시컬 환경이기 때문에 가능.
incrementCounter 는 outer 함수의 실행 결과로 반환된 함수이고, outer 함수의 실행이 종료된 이후에도 counter 변수에 접근할 수 있습니다.
이게 클로저의 특징입니다.