본문 바로가기
학습 log (이론)/javascript

'클로저에 대해서' 중요한

by abbear25 2016. 10. 24.

클로저

이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수

클로저를 구현하는 전형적인 패턴

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


클로저 활용시 주의사항

클로저의 프로퍼티값이 쓰기 가능하므로 그 값이 여러 번 호출로 변할 수 있음

하나의 클로저가 여러 함수 객체의 스코프 체인에 들어가 있는 경우 발생

루프 안에서 클로저를 활용할 때 주의

반응형