1)
function 이라는 선언자(?)가 삭제됐을 때,
function 에서 선언(?)한 object 는 살아남았을까..라는 의문에서 시작해봤습니다.

...

2)

<div id=output120321_1 >결과출력장소</div>

<script>

function functionSample120321_1() {
  var b;

  function a() {
    return [1, 2];
  }

  b = a();
  delete a;

  document.getElementById('output120321_1').innerHTML=b;
}

functionSample120321_1();

</script>


...

3)

결과출력장소


...

4)
object (정확히는 Array 개체..?)는 살아남았네요.

함수를 삭제한다고, 함수 내에서 정의한 object 까지 날리지는 않는가봅니다.

5)
선언..이라고 적긴 했지만,
[] 를 적은 시점에서 선언이 아닌 생성이었겠네요.

(.. 이후 내용 '12.06.02 15:51 추가본..)

... 그런데.. 하다보니,

6)
object 가 아닌, function 내의 변수는 어떨까..라는 의문이 들더라구요.

...

7)

<div id='output120321_2' >결과출력장소</div>

<script>

function functionSample120321_2() {

  var a;

  function b(e) {
    var d=e;
    return function() {
      return d;
    }
  }

  a = b(3);
  delete b;

  document.getElementById('output120321_2').innerHTML=a();
}

functionSample120321_2();

</script>


...

8)

결과출력장소


...

9)
호오.. 살아있습니다.
함수가 삭제된다고, 변수 선언자까지 삭제되는 것은 아니군요..

.. 아니,

함수선언이 삭제된다고
선언한 함수까지 삭제되는 것이 아니라는 표현이 맞을 것 같습니다.

함수가 함수로써의 기능을 가지고 있고,
delete 선언의 경우에는 변수명 지정을 날리는 역할로 보이네요.

예전에 test 했던 delete-가-실제-메모리에-적용되는-타이밍-IE 의 경우에는,
안쪽에 있던 항목들을 삭제하는 기능을 했지만,

function 만 삭제하는 경우에는
function 을 선언하면서 사용한 공간까지는 비우지 못하는 것 같네요.

..라고 적었는데요, 

(.. 이후 내용 '12.09.14 14:50 추가본..) 

한참 나중(?)에 와서 이 내용을 읽다가 오류를 발견(?)하고,
한번 더 테스트 해봅니다. 
*참고* http://buildnewgames.com/garbage-collector-friendly-code/ 

10) 

<div id='output120321_3' >결과출력장소</div>

<script>

function functionSample120321_3() {

  var a, b={};

  b.c=function (e) {
    var d=e;
    return function() {
      return d;
    }
  };

  a = b.c(3);
  delete b.c;

  document.getElementById('output120321_3').innerHTML=a()+' '+b.c;
}

functionSample120321_3();

</script>


... 

11) 

결과출력장소


... 

12) 
기존 7)번 내용에서 
b 가 사라지지않는 버그(?)를 발견(?)하고 급하게 다시 고쳤습니다. 

물론, 위의 실험에서 확인하려던 변수값이
사라지지는 않습니다. 

.. 뭐랄까요.. 실행했을 때 이미 
해당 함수가 할 도리(?)를 다 했다고 봐야하니까요.

function 으로 선언한 내용들은 
실행했을 때 의미가 있는 것이지, 

function 실행 이전과 이후는 
실행했을 때와는 관계가 없는 거라서요.. 

... 

easyBow killofki@.


Posted by killofki
,