*참고?* scriptStack]...으로 구현해본(?) 시험해볼만한(?) 예시입니다... *3
http://club.cyworld.com/5348929013/41888267
...
최근에 opensocial 에 대한 개인적인(?) 관심이 높아지면서 함수 하나를 만들어봤다.
아직 진행중이긴 하지만, 일단 만들어는 봤으니... 시험을...
...
<script>
var callArray=new Array(), callCount=0, finishFunction='';
function addCall(addingFunction) {
var p=callArray.length;
callArray[p]=function(dataResponse) {
addingFunction(dataResponse);
callCount;
if (--callCount) {
finishFunction();
finishFunction='';
callArray.length=0;
}
};
callCount++;
return callArray[p];
}
function abc() { alert('abc'); }
function def() { alert('def'); }
function ghi() { alert('ghi'); }
function Finished() { alert('Finished'); }
addCall(abc);
addCall(def);
addCall(ghi);
finishFunction=Finished;
</script>
<script>
delete callArray[0]; // <- abc 만 삭제
//delete callArray[1];
//delete callArray[2];
for (var i in callArray) alert(i);
for (var i in callArray) callArray[i]();
for (var i in callArray) alert(i);
for (var i in callArray) callArray[i]();
</script>
...
이 내용을 testing 해 보면, 1, 2, def, ghi, 1, 2, def, Finish 순으로 불러지는 것을 알 수 있다.
그럼 왜...?
...
사실... 맨 처음에 delete 가 전혀 진행되지 않았다면 0, 1, 2, abc, def, ghi, Finish 순으로 됐을 것이다.
두번째 for 문에도 부를 수 있었겠지만,
초기화할 때 추가해놨던(?) callCount 세번이
abc, def, ghi 를 "부르기위해 만들어놓은 함수"에서 모두 소모하면서
마무리 finishFunction 을 부르게 되고,
그 때 callArray.length=0 으로 만들어놔서(?) callArray[] 내역(?)을 비워버린 것.
덕분에 alert 가 작동할 틈도 없이 i in callArray 에서 쫑냈다...랄까.
...
다시 본문에서 설명하면...
1, 2 는 callArray[] 에서 삭제되지 않은 변수들이고, 거기에 따라 불러지는 것이 def, ghi 이다.
def, ghi 를 불렀으니 callCount-- 두번,
그 다음에 1, 2 를 부를 수 있다고 했지만,
def 를 부르면서 callCount 가 0 이 된 바람에 급(?) finishFunction 을 부르게 되고,
부르면서 마무리 length=0 이라고 해놨으니, i in callArray 에서는 더이상 부를 내역이 없어서 종료.
...
이런 내역들로 보아, function 실행을 Array 로 담그는(?) 경우는 몰라도,
delete 함수는 Array 에 있는 인수를 없애는 기능을 하고,
.length=0 함수는 numeric 화된 Array() 의 내용을 비워버리는 것이다...라고 설명할 수 있을 것 같다.
...
사실, function 을 Array 에 심은 후, 변수에 Array 값을 넣어서 시험해봐야하는데
-.-... 잘 될지 애매해서 이정도에서 급마물...
...
그건 그렇고... 이 함수와 opensocial 의 관계를 밝히자면...
...
function getData() {
req.send( addCall( dataResponse ) );
...
}
function showData() {
...
}
function init(){
getData(...);
...
finishFunction=showData;
}
gadgets.util.registerOnLoadHandler(init);
...
아직 시험중이라 여러가지 오류들을 잡아야 하겠지만, = =;... 아직 좀 애매한 부분이 있는 것 같아서
힘닿을 때(?) 다시 서술해봐야겠다.
NowMark killofki@.