Javascript 리턴값 넘기는 방법
글쓴이: mymailcool / 작성시간: 화, 2014/08/19 - 2:25오후
안녕하세요.
Javascript를 공부하고 있는 초보 학생인데요.
패턴을 공부하던중 막히는 부분이 있어 질문 올리네요..
/////// # 첫번째 시도
var t = (function(){
var a;
var init = function () { a = 1;};
return {
init : init,
a : a
}
}());
t.init();
t.a <=== 'undefined' 가 뜹니다 ㅡ.ㅡ?
/////// # 두 번째 시도
var t = (function(){
var a;
var init = function () { a = 1;};
return {
init : init,
a : function () { return a;}
}
}());
t.init();
t.a(); <======= // 원하던 결과값이 제대로 나옵니다.
아직 미숙하여 원인을 못찾겠습니다. 스코프도 문제 없는거 같고 클로저도 문제 없을듯 보이는데.. 제가 어딜 놓치고 있는걸까요?
Forums:
스페이스 가 안먹네요.
만약 t.init() 당시 내부에 있는 a가 var a 정의한 것과 다르다면은 첫 번째 방법을 통해 undefined 된게 정상일텐데..
그러면 두 번째 방법에서 a가 나오는 경우는 어떻게 가능한거죠?
첫 번째 t는 { init: function() {
첫 번째 t는
라는 오브젝트 이고
두 번째 t는
라는 오브젝트이며, 각 함수의 a 는 var a 를 참조하고 있는게 맞습니다.
첫 번째의 경우는 t.a가 var a를 참조하는게 아니라, 익명함수 return 할 때 undefined 값이었던 var a의 값이 t.a 로 복사된 것입니다.
감사합니다.
알면 알수록 아리송 하군요 ^^;;
그럼 제가 이해한 개념이 맞는 건가요?
a : function() {return a; } 는 선언 당시 내부를 수행 하지 않기 때문에 클로저에 존재 하는 var a 를 참조 할수 있는건가요?
a : a 는 익명함수 실행하고 초기화 되지 않은 var a 를 오브젝트 a라는 property에 undefined 를 그대로 복사 한거군요..
저는 t.a를 호출할때 a 가 다시 var a 를 참조해서 값을 가지고 오는줄 알았네요... 기본이 없으니깐 많이 흔들리네요 ^^;;
맞습니다. 간단히 생각하면, 변수 이름으로 접근할
맞습니다.
간단히 생각하면, 변수 이름으로 접근할 때는 코드 수행 시점에 그 값을 가져옵니다. 익명함수가 실행되는 시점에 a는 undefined 였고,
라는 오브젝트가 생성되어 버려서 t.a로 더 이상 var a에 접근할 수 없는 것이죠.
댓글 달기