2011-10-02 4 views
4
function outer(){ 
    var a, b, c; 

    function inner1(){ 
    ... 
    } 

    function inner2(){ 
    ... 
    } 

    inner1(); 
    inner2(); 
    ... 
} 

코드를 작성하기 위해 전역 네임 스페이스를 깨끗하게 유지하고 싶습니다. 내부 함수는 Outer 내부의 코드에서만 사용됩니다. 그러나 그 후에는 이것이 메모리 문제를 일으키는 지 생각하기 시작합니다. 내부 함수가 미리 생성되었는지 또는 outer()가 호출 될 때마다 생성되는지 확실하지 않습니다. 그리고 그들은 메모리 누출을 일으킬 것인가?이 자바 스크립트로 인해 메모리 누수가 발생합니까?

누군가가 outer()가 호출 될 때와 반환 할 때 어떤 일이 일어날 지 설명 할 수 있습니까? 그리고 자바 스크립트 메모리 관리에 대한 좋은 책이나 기사가 있다면 저에게 연락하십시오. 나는 항상 그런 문제들로 혼란스러워한다. 감사.

답변

0

: 내가 믿는 당신의 내부 함수는 outer()을 실행할 때마다 생성/정의되며 대부분의 JS 해석기는 outer()이 실행 된 후 함수 범위의 다른 변수와 함께 을 실행 한 후에 가비지 수집해야합니다.outer()은 이러한 내부 기능을 자체 범위 외부로 "내 보냅니다". 나중에 이벤트 핸들러로 지정하거나 return 문에 포함 시키십시오.

+0

그들이 수출되고 사용된다면 나는 그것을 누출이라고 부르지 않을 것이다. – davin

+0

@davin - 아니, 그리고 나도 않았다. 나는 메모리 누수 문제를 다루는 것이 아니라,'outer()'가 호출 될 때마다 내부 함수가 생성되었는지 여부에 관한 문제를 다루고있다. – nrabinowitz

0

다른 코드를 내부에 넣지 않은 경우 - 간단한 폐쇄에서 누출에 대해 걱정할 필요가 없습니다. 현대적인 자바 스크립트 엔진이이를 잘 처리합니다.

1

자바 스크립트가있는 브라우저에서 메모리 누수가 발생하는 주된 문제는 DOM과 JS에 두 개의 독립 가비지 수집기가 있다는 사실입니다. 클로저 함수에서 DOM 요소에 대한 참조를 시작한 다음 함수 내에서 다시 역 참조하면 문제가 발생합니다. 귀하의 구조가 새는 것은 아니지만 더 많은 일을하고 싶고 누출 가능성이 있습니다.

관련 문제