- 함수를 선언할 때 만들어진 scope가 사라진 후에도 호출할 수 있는 함수
- scope가 끝난 외부 함수의 변수를 참조할 수 있다.
→ 어떤 함수 A에서 선언한 변수 a를 참조하는 내부함수 B를 외부로 전달할 경우, A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상 - 클로저(closure)란, 외부 함수에 접근할 수 있는 내부 함수 혹은 이러한 원리를 일컫는 용어인데 스코프에 따라서 내부함수의 범위에서는 외부 함수 범위에 있는 변수에 접근이 가능하지만 그 반대는 실현이 불가능하다는 개념이다. 특징으로는 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는다.예를 들어 한 함수안에 다른 함수가 있다면 그 안의 함수는 바깥에 정의해놓은 변수를 사용할 수 있지만 그 반대는 가능하지 않다.
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
//myFunc변수에 displayName을 리턴함
//유효범위의 어휘적 환경을 유지
myFunc();
//리턴된 displayName 함수를 실행(name 변수에 접근)
- 일반적으로는 함수 안의 지역 변수들은 그 함수가 처리되는 동안에만 존재하기 때문에 displayName 함수가 리턴되면 name변수에 접근 할 수 없다고 예상된다. 하지만 자바스크립트에서는 함수를 리턴할 때, 클로저를 형성하기 때문에 클로저가 형성될 당시의 함수와 함수가 선언된 어휘적 환경의 조합(쉽게 말해 당시의 관계되는 코드들)의 참조를 유지한다.(즉, 기억한다.)
따라서 myFunc함수를 호출하면 name 변수는 클로저에 의해 기억되고 있기 때문에 "Mozilla"가 alert에 전달되게 된다.
'Javascript' 카테고리의 다른 글
[Javascript] require 와 import 비교 (0) | 2023.01.09 |
---|---|
[JS] 중복되지 않는 알파벳으로 이루어진 가장 긴 문자열 찾기 (0) | 2022.12.31 |
[JavaScript] 이진 탐색(Binary Search) 알고리즘 (0) | 2022.09.13 |
[Javascript] Math 함수 정리 (0) | 2022.09.13 |
[Javascript] Array 함수 훈련 (0) | 2022.09.13 |