*참고?* 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@.


Posted by killofki
,