- 변수의 범위(scope)가 코드의 구조에 따라 결정되는 방식
- 즉, 함수가 정의된 위치에 따라 어떤 변수에 접근할 수 있는지를 결정한다.
- JavaScript에서는 렉시컬 스코프를 따른다.
특징
1. 함수가 정의된 위치에 따라 그 함수가 접근할 수 있는 변수의 범위가 결정된다. (함수가 호출되는 위치와는 무관)
2. 함수 안에 다른 함수를 정의할 수 있다. 내부 함수는 외부 함수의 변수에 접근할 수 있지만 반대는 성립되지 않는다.
function outer() {
const outerVar = 'I am outer';
function inner() {
console.log(outerVar); // 'I am outer' 출력
}
inner();
}
outer();
3. 전역에서 정의된 변수는 모든 내부 함수에서 접근할 수 있지만, local에서 정의된 변수는 그 지역의 함수 내에서만 접근할 수 있다.
const globalVar = 'I am global';
function myFunction() {
const localVar = 'I am local';
console.log(globalVar); // 'I am global' 출력
console.log(localVar); // 'I am local' 출력
}
myFunction();
console.log(localVar); // ReferenceError 발생
렉시컬 스코프와 클로저(Closure)
- 렉시컬 스코프와 관련된 중요한 개념 중 하나는 클로저(closure)이다.
- 클로저는 함수 안에 있는 함수로, 외부 함수의 변수를 기억하고 사용할 수 있는 내부함수이다.
function myHouse() {
let toy = "축구공";
function playGround() {
console.log(toy); // '축구공'을 출력
}
return playGround;
}
let play = myHouse();
play(); // '축구공'을 출력
- myHouse 함수는 toy라는 장난감을 가지고 있다.
- playGround 함수는 toy를 기억하고 있고,
- 나중에 playGround 함수를 실행할 때 toy를 사용할 수 있다.
'코린이 개념잡기 > JavaScript' 카테고리의 다른 글
자바스크립트 this (0) | 2025.01.03 |
---|---|
웹 브라우저의 동작 원리 (1) | 2024.12.28 |
var, let, const (0) | 2024.12.28 |
얕고(Shallow), 깊은(Deep) 복사(Copy) (1) | 2024.12.20 |
==와 ===의 차이 (0) | 2024.12.20 |