2015년 3월 1일 일요일

지연변수 스코프를 만들기위해 즉시 실행함수 표현식 사용법

반복문등에서 클로져를  이용하 여 지역변수를 참조하려할때, 클로저에서 변수값을 복사가 아닌 참조를 ㅎㅏ는 특성때 문에 반복 문의 마지막 변수만 참조하는 문제점이 있다.

--------------

function wrapElements(a){
var result=[];
for(var i=0,n=a.length;i<n;i++){
result[i]=function(){return a[i];};
}

}
var wrapped=wrapElements([10,20,30]);
var f=wrapped[0];
f();

이때,클로 져를  즉시실행함수로 감싸서  즉 시 실행함수에서  별도의 변 수 에 반복문의 반복 변수등을 복사저장한다음 클로져를 사용하면 된다.

function wrapElements(a){
var result=[];
for(var i=0,n=a.length;i<n;i++){
//즉시실행함수에서 i 값을 j 로 복제한다.
(function(j){
//result[i] 값이 객체로 온다는 것 주의
result[i]=function(){return a[j];};
})(i);

}
return result;

}
var wrapped=wrapElements([10,20,30]);
//리턴
var f=wrapped[1];
console.log(f());

0 comments:

댓글 쓰기