조금 전에 어떤 사이트 들어가서 분석(?)을 하다가,
함수에 이런 형태(내용은 새로 구성했습니다)의 내용이 보였다.

...


<script>
function show110202_1(ev) {
  var ov='', ove;

  ov+='<'+'br/>userid : '+ev.getAttribute('userid');
  ov+='<'+'br/>tistory : '+ev.getAttribute('tistory');
  ov+='<'+'br/>egloos : '+ev.getAttribute('egloos');
  ov+='<'+'br/>cyLog : '+ev.getAttribute('cyLog');
  ov+='<'+'br/>minihome : '+ev.getAttribute('minihome');

  ove=ev.getElementsByTagName('a');
  if ((ove.length)&&(ove[0].className=='output')) ove[0].innerHTML=ov; else alert(ov);
  }
</script>

<div userid=killofki tistory=http://killofki.tistory.com egloos=http://killofki.egloos.com cyLog=http://www.cyworld.com/klfk cyblog=http://www.cyworld.com/killofki_ minihome=http://www.cyworld.com/killofki ><input type=button onclick=show110202_1(this.parentNode); value="showdivProfile" /><a class=output></a></div>


...





...

뭐라고할까... 좀 적게 표현해서 저만큼이지만,
생각보다 양이 많았더라는...

...

그래서(?) 예전에 자주 써먹어왔던
arguments 형식의 연속서술표현(?)방법으로 저걸 바꿔보자...는 생각을 해봤다.

...


<script>
function show110202_2(ev) {

  function trailev() {

// ar0 -0, ar0 -1, ar1 -0, ar1 -1, ...
// arx -0 : 앞이름, arx -1 : getAttribute 적용변수

    var ar=arguments, i, ov='';

    for (i=0; i<ar.length; i+=2)
      ov+='<'+'br/>'+ar[i]+' : '+ev.getAttribute(ar[i+1]);

    return ov;
    }

  var ov, ove;

  ov=trailev(
    'userid', 'userid'
    , 'tistory', 'tistory'
    , 'egloos', 'egloos'
    , 'cyLog', 'cyLog'
    , 'minihome', 'minihome'
    );

  ove=ev.getElementsByTagName('a');
  if ((ove.length)&&(ove[0].className=='output')) ove[0].innerHTML=ov; else alert(ov);
  }
</script>

<div userid=killofki tistory=http://killofki.tistory.com egloos=http://killofki.egloos.com cyLog=http://www.cyworld.com/klfk cyblog=http://www.cyworld.com/killofki_ minihome=http://www.cyworld.com/killofki ><input type=button onclick=show110202_2(this.parentNode); value="showdivProfile" /><a class=output></a></div>


...





...

대충 이런 형식으로...

( 물론, 지금의 경우 getAttribute 에 들어가는 변수와 소개명이 같으니 더 줄일 수도 있지만,
나중에 사용자명, 티스토리...처럼 바꿔야할 때도 있을테니...)

1)
지금의 방법은 해당 사용하는 함수가
적용될 함수 내에서만 가능하다는 문제점(?)이 있기는 한데,

뭐... 밖으로 끌어내는 방법도 여러가지가 나올 수 있다.
(예를 들면, ar[0]=ev, ar[1]=ar0-1, ar[2]=ar0-2, ... 형식으로...)

...

한창(?)때 기억으로 돌아가보면... (웹진 게시판지기시절...)

2)
함수내함수 선언법을 몰라서,
무작정 밖으로 끌어내는 방법으로만 함수를 만들었다. (함수외함수...?)

*예시*
  function trailevOut() {

// ev, ar0 -0, ar0 -1, ar1 -0, ar1 -1, ...
// arx -0 : 앞이름, arx -1 : getAttribute 적용변수

    var ar=arguments, i, ov='', ev;

    ev=ar[0];
    for (i=1; i<ar.length; i+=2)
      ov+='<'+'br/>'+ar[i]+' : '+ev.getAttribute(ar[i+1]);

    return ov;
    }


3)
게시판지기가 여러명인 경우가 있어서,
수정하기 쉬우라고(?) 저런 함수형식을 만들기도 했다.

4)
게시물 길이 압축을 위해
저렇게 만들기도 했다.
(대략, 50% 정도의 효율...?)

5)
타박도 참 많이 받았다...
웹브라우져마다 보이는 형태가 다른 경우가 있으니... (속도가 느려지는 현상 포함...)

스크립트는 미리보기 지원이 안되는 문제도 있으니까...

...

이 방법에 대해, 살짝 경계해야할 부분은,

6)
함수내 함수의 경우, 변수전달에는 좋지만,

함수내함수를 구축하는 과정에서
사용되는 변수를 "선언"하는 과정이 포함되
살짝 느려질 수 있다.

원함수 (위의 예제중 아래쪽인 show110202_2() ) 를
한두번 호출하는 정도라면 문제가 되지 않겠지만,

7)
원함수를 한번(?)의 스크립트로 여러번 반복호출해야한다면
(음... 예를들어 for(i=0; i<100; i++) show100202_2(); 같은 형태랄까...)

함수내함수가 여러번 구축되어 느려지기 쉬우니

변수 "선언"을 줄일 수 있는 방법을 고민해야할 것 같다.
(전역선언을 해놓고 사용한다든지, 함수내 함수가 아닌, 함수 외 함수로 형태를 바꾼다든지...)

8)
선언하기 위해 함수내함수를 선언하는 경우도 있다.
여러번 반복구축하는 것이 아니니, 그럴 땐 맘 놓고 서술해도 될 듯.

...

smallLet killofki@.

ps... 서술자의 지식이 짧아 "함수내함수", "반복함수"...등의 표현을 사용합니다.
나중에 수정은 하지 않겠지만, ... 뭐... 다른 표현방법이 나온다면 좋겠네요 ㅎㅎ;...


Posted by killofki
,