Javascript 클로저(Closure)
클로저(Closure)의 정의
클로저란 특정한 함수를 의미하며, 스코프의 개념을 이용하여 변수에 접근할 수 있는 범위(scope)를 제한하는 개념입니다.
따라서 클로저 함수의 특징을 다음과 같이 설명할 수 있습니다.
- 외부함수에서 내부함수 스코프에 접근할 수 없다.
- 내부 함수에는 외부 함수 스코프에 접근할 수 있다.
- 외부 함수의 실행이 종료된 후에도 클로저 함수는 외부 함수 스코프에 접근할 수 있다.
이 내용과 관련된 좋은 코드가 제로초(조현영)
님의 블로그에 있어 첨부합니다.
let makeClosure = function () { let name = "zero"; return function () { console.log(name); };};let closure = makeClosure(); // function () { console.log(name); }closure(); // 'zero';
위의 코드처럼 전역 스코프에서는 name 변수에 접근할 수 없지만,
makeClosure 내부 함수에서는 접근하여 값을 출력하는 것을 확인할 수 있습니다.
클로저(Closure)를 쓰는 이유
- 데이터 보존 : 함수의 실행이 끝나더라도 데이터를 스코프 안에 간직한 채로 계속 사용할 수 있습니다.
- 캡슐화 : 클로저 함수에 값이 종속되어 외부에서 접근할 수 없기 때문에 안전하게 데이터의 불변성을 지킬 수 있습니다.
결과적으로 클로저(Closure)란
함수를 리턴하는 함수가 아니라 내부함수(function)가 상위 스코프(makeClosure)의 값을 참조하고 있고 외부에서 실행하였을 때
상위 스코프의 값(name)을 수정할 수 없는 형태를 의미합니다.
출처 :
https://www.zerocho.com/category/JavaScript/post/5741d96d094da4986bc950a0
https://hanamon.kr/javascript-%ED%81%B4%EB%A1%9C%EC%A0%80/