0)
random 함수...등에 사용되는 저장형태의 변수가

object 설정이 아닌
기존 함수 내에서 사용하는 변수를 쓸 수 있을까...라는 생각을 하고 실험(?)을 해봤다.

...

1)

<script>
var linkValue=0;

function console() { var ar=arguments, arl=ar.length, i; for (i=0; i<arl; i++) document.write(ar[i]); document.write('<'+'br/>'); }
function valueConsole(v, w) { console(v, ' : ', w.getValue()); }

function setFunctionLink(v) { // set function to object v
  var linkValue;
  function putValue(w) { linkValue=w; }
  function getValue() { return linkValue; }
  v.putValue=putValue;
  v.getValue=getValue;
  console('preValue : ', linkValue);
  }

var a={}, b={}, c={}, d={};

setFunctionLink(a);
  console(' - setFunctionLink(a);');
a.putValue(1);
  console(' - a.putValue(1);');
valueConsole('aValue', a);
  console('');

setFunctionLink(b);
  console(' - setFunctionLink(b);');
b.putValue(2);
  console(' - b.putValue(2);');
valueConsole('aValue', a);
valueConsole('bValue', b);
  console('');

new setFunctionLink(c);
  console(' - new setFunctionLink(c);');
c.putValue(3);
  console(' - c.putValue(3);');
valueConsole('aValue', a);
valueConsole('bValue', b);
valueConsole('cValue', c);
  console('');

linkValue=4;
  console(' - linkValue=4; // global');
valueConsole('aValue', a);
valueConsole('bValue', b);
valueConsole('cValue', c);
  console('');

d.putValue=a.putValue;
  console(' - d.putValue=a.putValue;');
d.getValue=a.getValue;
  console(' - d.getValue=a.getValue;');
valueConsole('aValue', a);
valueConsole('bValue', b);
valueConsole('cValue', c);
valueConsole('dValue', d);
  console('');

d.putValue(5);
  console(' - d.putValue(5);');
valueConsole('aValue', a);
valueConsole('bValue', b);
valueConsole('cValue', c);
valueConsole('dValue', d);
  console('');

</script>


...




...

2)
결과는... 예상과는 조금(?) 달랐다.

함수를 부르는 과정에서 함수 앞 new 와는 관계 없이
var 가 변수를 새로 만들었기 때문에

같은 함수를 이용해서 호출을 했다고 하더라도
돌려주는 값은 각기 달랐다. (a, b, c)

해당 값이 외부의 값과도 연동되지 않았다. ( linkValue=0; , linkValue=4; )

그래서, d { } 에서 사용한 것 처럼 ( d.putValue=a.putValue; , d.getValue=a.getValue; )
선언된 함수를 이용해서 변수위치를 전달하는 방법 밖에 없는 것 같다.

*주의*
javascript 의 함수사용은 함수를 매번 해석하고 처리하기 때문에 나타나는 결과임.
다른 언어에서는 함수형태의 object 가 따로 있기 때문에 결과가 다를 수 있음.

...

3)
이렇게 된다면... 문제(?)될 부분이 하나 있는데,

함수내에서 커다란 변수를 제작(?)해서 사용(?)하는 경우,
메모리가 overflow 될 가능성도 가지게 된다는 것.

3-1)
물론, overflow 될 가능성에
함수가 물고갔기 때문이라는(?) 가능성을 배제했기 때문에 실험을 더 해야겠지만...

...

4)
object 를 만들어 사용하자는 것이
그냥 편하게 쓰기위해서인줄 알았더니

함수내 변수 사용량을 줄이기 위한 최소한의 방법으로도 보인다.

4-1)
결국은 외부변수로 최소화시키는 것이 정답이려나...

...

smallLet killofki@.

Posted by killofki
,