클로저
이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수
클로저를 구현하는 전형적인 패턴
function outerFunc(){
return function(){ // 클로저 시작
//x와 arguments를 활용한 로직
} // 클로저 끝
}
var new_func = outerFunc(); // outerFunc 실행 컨텍스트 종료
new_func();
*외부 함수의 호출이 이루어지고, 이 회부 함수에서 새로운 함수가 반환됨
반환된 함수가 클로저이고 이 클로저는 자유 변수를 묶고 있음
반화된 클로저는 새로운 함수로 사용
클로저 활용
우선 클로저는 성능적, 자원적으로 약간 손해를 볼 수 있으므로 제한적으로 사용
정해진 형식의 함수를 콜백해주는 라이브러리가 있을 때, 그 정해진 형식과는 다른 형식의 사용자 정의 함수를 호출할 때 유용하게 사용
함수의 캡슐화
연관된 데이터나 함수들을 논리적으로 묶어 정리, 공개된 정보 이외에 다른 정보들에 직접적인 접근을 제한하는 프로그래밍 기법
var getCompletedStr = (function(){ var buffAr = [ 'I am ', '', '\, I major in ', ]; return (function(name, job){ buffAr[1] = name; buffAr[3] = job; return buffAr.join(''); }); })(); var str = getCompletedStr('illua','programmer'); console.log(str);
//결과: I am illua, I major in programmer
클로저 활용시 주의사항
클로저의 프로퍼티값이 쓰기 가능하므로 그 값이 여러 번 호출로 변할 수 있음
하나의 클로저가 여러 함수 객체의 스코프 체인에 들어가 있는 경우 발생
루프 안에서 클로저를 활용할 때 주의
반응형
'학습 log (이론) > javascript' 카테고리의 다른 글
[jquery 요소 정리] html, CSS 접근 방법 (0) | 2019.01.01 |
---|---|
'객체지향 프로그래밍' 기초 (0) | 2016.10.31 |
'스코프 체인에 대해서' 중요한 (0) | 2016.10.24 |
'콜백 함수' 맛보기 (0) | 2016.10.21 |
'실행 컨텍스트에 대해서' 중요한 (0) | 2016.10.20 |