나는 클로저를 이해한다고 생각했지만 갑자기 뭔가 간단한 것이 작동하지 않는 것 같습니다.클로저가 상태 변경을 유지하지 않음
나는 클로저를 사용하여 싱글 톤을 만들었습니다. 여기에 매우 축소 된 버전입니다 :
Foobar = function() {
var data = null;
function init(obj) {
data = obj;
}
return {
init: init,
currentValue: data
}
}();
는 싱글이기 때문에, 나는 내가 '초기화하기'함수를 호출 할 때, '데이터'의 값이 존재하는 유일한 객체에 변경 될 것으로 기대가, 그 값은 'currentValue'를 사용하여 이후의 검색에서 계속 사용할 수 있습니다. - '데이터'init 함수에 볼 수 있습니다, 그리고 그 변화하고 있음을 나는 파이어 폭스 (F12)에서이 코드를 단계별로 할 때,
Foobar.init({id:3});
var test = Foobar.currentValue;
를 내가 네 것을 볼 수 있습니다 여기에
내 테스트입니다 변수 'init'을 실행할 때. 그러나, init 함수를 빠져 나온 후 test의 두 번째 라인을 실행하기 위해 돌아 오면 'init'함수에 전달 된 객체의 복사본 대신 var 'test'에 null (싱글 톤이 생성되었을 때의 원래 값)이 할당됩니다 , 나는 예상했다.누군가 내 혼란을 해결할 수 있습니까?
SO는 감사를 피하라고하지만,이 경우에는 ... 너무 많은 시간에 너무 작은 예제 사례 또는 특별한 경우 상황에서 버그를 푸는 데 초점을 맞 춥니 다. 그 사람이 다음 사람을 도울 수 없을 때, 그들은 실제 질문에 대한 일반적인 경우 대답을 얻기 위해 다시 질문을하고, 중복 된 질문을 물어 봅니다. 당신은 실제로 질문에 답하고 "버그 수정"보다는 제게 뭔가를 가르쳐주었습니다. 그러면 미래에 실수를 반복 할 확률이 줄어 듭니다. 이러한 종류의 대답은 내가 왜 그렇게 가치가 있는지에 대한 것입니다. – JackLThornton