2013-01-19 4 views
0
(function(){ 
    var a; 

    function inner1(arg){ 
    a = arg; 
    } 

    function inner2(){ 
    alert(a); 
    } 

})(); 

내 다른 두 내부 함수 외부에서 변수 a를 선언하기 때문에 이로 인해 메모리 누수가 발생합니다.내부 함수의 메모리 누수

+3

이 호출된다 어휘 범위 (http://stackoverflow.com/q/1047454/1331430), 일명 JS의 범위 체인 언어의 가장 일반적인 형태 중 하나. 모든 JS 구현에는 더 이상 참조 된 객체를 메모리에서 제거하여 메모리 문제를 처리하는 GC (가비지 수집기)가 있습니다. 일반적으로 순환 참조가 있거나 핸들러가 연결된 요소를 제거하거나 일부 IE 버그를 제외하고는 "메모리 누수"에 문제가 없습니다. –

+0

이 예제 함수는 * nothing *을 수행하므로 누수되는 데이터가 없습니다. 가비지 수집은 * 구성된 * 함수가 여전히 데이터를 참조하는 것에 달려 있습니다. – Bergi

답변

2

아니요. 익명 함수 클로저 내에 해당 변수를 이미 선언했기 때문에 아니요.

다음을 수행하여이를 증명할 수 있습니다.

(function(){ 
    var a; 

    function inner1(arg){ 
    a = arg; 
    } 

    function inner2(){ 
    alert(a); 
    } 

})(); 

alert(a)