>  Q&A  >  본문

JavaScript 가비지 수집이란 무엇입니까?

<p>JavaScript 가비지 수집이란 무엇입니까? 웹 프로그래머의 경우 더 나은 코드를 작성하려면 JavaScript 가비지 수집의 중요성을 이해하는 것이 중요합니다. </p>
P粉334721359P粉334721359430일 전538

모든 응답(2)나는 대답할 것이다

  • P粉033429162

    P粉0334291622023-08-18 09:23:54

    DOM 객체의 경우 순환 참조에 주의하세요.

    JavaScript의 메모리 누수 패턴

    객체에 대한 활성 참조가 없을 때만 메모리를 회수할 수 있다는 점을 기억하세요. 이는 클로저 및 이벤트 핸들러에서 흔히 발생하는 함정입니다. 일부 JS 엔진은 내부 함수에서 실제로 참조되는 변수를 확인하지 않고 둘러싸는 함수의 모든 지역 변수를 유지하기 때문입니다.

    다음은 간단한 예입니다.

    으아악

    순진한 JS 구현은 이벤트 핸들러가 존재하는 동안 수집할 수 없습니다. bigString。有几种解决这个问题的方法,例如在init()的末尾设置bigString = nulldelete对于局部变量和函数参数不起作用: delete从对象中删除属性,而变量对象是不可访问的 - 在严格模式下的ES5甚至会抛出ReferenceError 지역 변수를 삭제하려고 하면! ).

    메모리 소비에 관심이 있다면 불필요한 클로저를 피하는 것이 좋습니다.

    회신하다
    0
  • P粉547170972

    P粉5471709722023-08-18 00:17:21

    Eric Lippert는 얼마 전에 이 주제에 관해 이야기하는 자세한 블로그 게시물을 작성했습니다(또한 VBScript와 비교). 더 정확하게 말하자면, 그는 JavaScript와 매우 유사하지만 Microsoft가 ECMAScript를 직접 구현한 JScript에 대해 썼습니다. Internet Explorer의 JavaScript 엔진에서도 대부분의 동작이 동일하다고 가정할 수 있습니다. 물론 구체적인 구현 방식은 브라우저마다 다르지만 몇 가지 공통 원칙을 다른 브라우저에도 적용할 수 있을 것으로 생각됩니다.

    이 페이지에서 인용:

    가비지 수집의 주요 목적은 프로그래머가 자신이 만들고 사용하는 개체의 메모리 관리에 대해 걱정할 필요가 없도록 하는 것입니다. 물론 때로는 불가피한 경우도 있습니다. 가비지 수집이 작동하는 방식에 대해 최소한 일반적인 이해를 갖는 것이 항상 유익합니다.

    역사적 참고: 이전 버전의 답변에는 delete 연산자에 대한 잘못된 참조가 있었습니다. JavaScript에서는 삭제 작업 연산자는 객체에서 속성을 삭제하는데, 이는 C/C++의 delete와 완전히 다릅니다. delete运算符的错误引用。在JavaScript中,delete运算符从对象中删除属性,与C/C++中的delete

    회신하다
    0
  • 취소회신하다