클로저라는 현상은 런타임 중에 루틴을 만들 수 있는 언어
고차 함수를 위해 컨텍스트를 메모리에 남겨두어서 다시 참조할 수 있게
흔히 함수 내에서 함수를 정의하고 사용하면 클로저라고 한다
하지만 대개는 정의한 함수를 리턴하고 사용은 바깥에서 하게된다
MDN에서는 클로저를 다음과 같이 정의하고 있다.
루틴(함수)이 생겼을 때, 자유변수가 존재할 수 있는데, 루틴이 그 자유 변수를 참조할 수 있다. 참조하면 해지를 못시킨다. free variables closure. 짧게 말해 closure이다.
JS는 중첩되어 있는 클로저 영역을 마구마구 생성할 수 있다. 중괄호를 계속 반복해서 쳐도 클로져가 만들어진다.
메인 플로우에 변수 a가 있다. 근데 블록 스코프안에 또 a가 있다. 근데 루틴안에 또 a가 있다. 이런걸 shadowing이라고 한다.
closure를 이용한 은닉화
shadowing은 언제 쓰는 걸까?
⇒ 네임스페이스를 정의할 때 쓰는 것이다. 이 이름이 내부쪽에서 사용될 때 바깥쪽 자유변수를 오염시키지 않게 하기 위함이다
일종의 바인딩이라 해제필요
JavaScript 클로저(Closure)
MDN에서는 클로저를 다음과 같이 정의하고 있다. 클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 '기억한다'. 흔히 함수 내에서 함수를 정의하고 사용하면 클로저라고 한다. 하지만 대개는 정의한 함수를 리턴하고 사용은 바깥에서 하게된다. 말로 설명하면 설명하기가 복잡하니 우선 코드를 보자. 위에서 정의한 getClosure()는 함수를 반환하고, 반환된 함수는 getClosure() 내부에서 선언된 변수를 참조하고 있다.
https://hyunseob.github.io/2016/08/30/javascript-closure/

클로저
클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다. 다음을 보자: function init() { var name = "Mozilla"; // name은 init에 의해 생성된 지역 변수이다. function displayName() { // displayName() 은 내부 함수이며, 클로저다. alert(name); // 부모 함수에서 선언된 변수를 사용한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures

자바스크립트 Closure, Nested closure, Shadowing
Closure 클로저라는 현상은 런타임 중에 루틴을 만들 수 있는 언어에서 만 발생한다. 루틴(함수)이 생겼을 때, 자유변수가 존재할 수 있는데, 루틴이 그 자유 변수를 참조할 수 있다. 참조하면 해지를 못시킨다. free variables closure. 짧게 말해 closure이다. Nested closure JS는 기존에 루틴만이 스코프를 만들어 냈었는데, es...
https://abelog.netlify.app/javascript/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-closure,-nested-closure,-shadowing/

클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 ‘기억한다’.

Seonglae Cho