2021 12 02
2021-12-02¶
코어 자바스크립트 [5장. 클로저]¶
- 1. 클로저의 의미 및 원리 이해 - MDN: A closure is the combination of a function and the lexical environment within which that function was declared - 어떤 함수에서 선언한 변수를 참조하는 내부 함수에서만 발생하는 현상 - 이 정의가 와닿음 - 어떤 함수 A에서 선언한 변수 a를 참조하는 내부함수 B를 외부로 전달할 경우, A의 실행 컨텍스트가 종료된 이후에도 a가 사라지지 않는 현상 - 이건 a에 대한 참조가 외부 변수와 연결되어 있어 GC의 대상이 되지 않기 때문! - 지역 변수를 참조하는 내부함수를 외부에 전달하면 클로저!
- 2. 클로저와 메모리 관리 - 클로저는 어떤 필요에 의해 의도적으로 함수의 지역변수를 메모리를 소모하도록 함으로써 발생 - 이제 쓸 만큼 쓰고 없앨라면, 해당 변수에 마지막에 null/undefined 써주면 뚝딱
- 3. 클로저 활용 사례
- 콜백 함수 내부에서 외부 데이터를 사용하고자 할 때
var fruits = ['apple', 'banana', 'peach']; var $ul = document.createElement('ul'); var alertFruitBuilder = function (fruit) { return function () { alert('your choice is ' + fruit); } } fruits.forEach(function (fruit) { var $li = document.createElement('li'); $li.innerText = fruit; $li.addEventListener('click', alertFruitBuilder(fruit)); $ul.appendChild($li); })- 접근 권한 제어 - 기본적으로 js는 객체의 필드 다 public - 해당 정보를 밖에서 건드리지 않게 해주는 장치로 사용 가능 - 부분 적용 함수 - n개의 인자를 받는 함수에 미리 m개의 인자만 넘겨 기억시켰다가, 나중에 (n-m)개의 인자를 넘기면 비로소 원래 함수의 실행 결과를 얻을 수 있게 하는 함수 - 커링 함수 - 여러 개의 인자를 받는 함수를 하나의 인자만 받는 함수로 나눠서 순차적으로 호출될 수 있게 체인 형태로 구성한 것