> For the complete documentation index, see [llms.txt](https://april.gitbook.io/learning-js/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://april.gitbook.io/learning-js/chapter-7./7.6.md).

# 7.6 함수, 클로저, 정적 스코프

#### 전통적인 프로그램

모든 함수를 전역에서 정의하고, 전역 스코프를 참조하지 않도록 함

#### 최신 자바스크립트

함수가 필요한 곳에서 즉석으로 정의할 때가 많음

ex. 함수를 변수나 객체 프로퍼티에 할당, 배열에 추가, 다른 함수에 전달, 함수가 함수를 반환, 이름 없을 때도 있음

## 클로저&#x20;

* 함수가 특정 스코프에 접근할 수 있도록 *의도적으로 그 스코프에서 정의*하는 경우
* 스코프를 함수 주변으로 **좁히는(closing)** 것
* 스코프 안에서 함수를 정의하면 해당 스코프는 더 오래 유지됨
* **함수를 정의해 클로저를 만들면 일반적으로는 접근할 수 없는 것에 접근할 수 있음**

```javascript
let globalFunc; // 정의되지 않은 전역 함수
{
    let blockVar = 'a'; // 블록 스코프에 있는 변수
    globalFunc = function() {
        console.log(blockVar);
    }
}

globalFunc(); // 'a'
```
