상세 컨텐츠

본문 제목

[javaScript] 렉시컬 스코핑과 함수의 실행환경

카테고리 없음

by esoesmio 2024. 5. 14. 22:29

본문

 

 

클로저(Closure)는 JavaScript에서 매우 중요한 개념입니다. 클로저를 이해하려면 먼저 **렉시컬 스코핑(Lexical Scoping)**과 **함수의 실행 환경(Execution Context)**에 대한 이해가 필요합니다. 이 개념들을 통해 함수가 어떻게 외부 변수에 접근할 수 있는지 설명할 수 있습니다.

### 렉시컬 스코핑
렉시컬 스코핑은 함수가 정의된 위치에 따라 상위 스코프를 결정하는 것을 의미합니다. 즉, 함수의 실행 환경은 함수가 작성된 위치에 의해 정적으로 결정됩니다. 함수가 실행될 때마다 해당 함수의 렉시컬 환경은 이미 결정되어 있으며, 이 환경에는 함수가 접근할 수 있는 모든 변수와 함수가 포함됩니다.

### 함수의 실행 환경
함수가 호출되면, 함수에 대한 새로운 **실행 컨텍스트(Execution Context)**가 생성됩니다. 이 실행 컨텍스트는 함수의 호출 스택에 푸시되고, 함수의 실행 동안 사용됩니다. 실행 컨텍스트의 중요한 부분은 **변수 환경(Variable Environment)**입니다. 여기에는 함수 내에서 선언된 모든 지역 변수, 매개변수, 그리고 함수 자체가 저장됩니다.

### 클로저의 정의
클로저는 함수와 그 함수가 선언된 렉시컬 환경의 조합으로 정의됩니다. 함수가 정의될 때, 그 함수는 자신이 선언된 렉시컬 환경에 대한 참조를 유지합니다. 이 렌체를 **클로저**라고 합니다. 클로저 덕분에 함수는 자신이 생성된 환경 밖에서 호출되어도 그 환경에 있는 변수에 접근할 수 있습니다.

### 클로저의 예제
```javascript

function makeAdder(x) {
    return function(y) {
        return x + y;  // 여기에서 `x`는 외부 함수의 매개변수
    };
}

const add5 = makeAdder(5);
const add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12


```
이 예제에서 `makeAdder` 함수는 또 다른 함수를 반환합니다. 반환된 함수는 `makeAdder` 함수의 매개변수 `x`를 참조합니다. `makeAdder`의 각 호출이 종료된 후에도, 반환된 함수들(`add5`, `add10`)은 여전히 `x`에 접근할 수 있습니다. 이것이 가능한 이유는 클로저 때문입니다. 각 함수 호출은 `x`의 값을 기억하고, 이를 통해 해당 값을 사용할 수 있습니다.

### 클로저의 사용
클로저는 데이터를 은닉하고 캡슐화하는 데 유용합니다. 예를 들어, 어떤 데이터를 직접적으로 접근하고 수정하지 못하게 하면서, 특정 함수를 통해서만 데이터를 조작할 수 있도록 할 때 클로저를 활용할 수 있습니다.

클로저는 JavaScript의 함수가 동작하는 방식을 근본적으로 이해하는 데 중요한 열쇠입니다. 이를 통해 여러분은 보다 효과적인 코드를 작성하고, 복잡한 기능을 구현할 수 있습니다.

댓글 영역