>  Q&A  >  본문

javascript - 일반적으로 모든 사람이 클로저에 함수를 사용합니다. 객체나 클로저를 사용하면 어떻게 되나요?

으아아아

test1 함수를 이렇게 호출한 후에도 여전히 메모리를 해제할 수 있나요?
전역 변수 a에는 test1 함수에 있는 개체에 대한 참조가 포함되어 있습니다. 왜 test1이 메모리를 해제하지 않을 것이라고 생각합니까? 조언 좀 부탁드립니다. . . .

PHP中文网PHP中文网2709일 전635

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

  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:44:53

    a와 test1은 실행 컨텍스트를 공유합니다. 즉, a와 test1이 공존하고 죽습니다~
    제 이해가 잘못된 것인지 모르겠습니다~예:

    으아악

    테스트를 실행하고 나면 test1이 나올 것 같고, a도 나올 것 같아요.
    함수에 있지 않고 창 바로 아래에 있으면 test1은 항상 존재합니다~

    회신하다
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:44:53

    예전에는 두 가지 문제로 착각했습니다.

    실행 후 test1의 변수는 직접 참조되지 않으므로 test1의 실행 환경, 즉 컨텍스트를 재활용해야 합니다. 이는 클로저가 아닙니다. 또한 test1의 함수 본문 자체는 그것이 위치한 컨텍스트에 속하는 속성입니다. 컨텍스트가 여전히 존재하는 한 함수 본문 자체는 재활용되지 않습니다.

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:44:53

    먼저 결론부터 얘기해볼까요
    우선 클로저의 정의는 자유변수에 접근할 수 있는 함수인데

    정의와 모순됩니다


    이해가 틀렸다면

    예를 바꿔주세요

    으아악 original obj1이 가리키는 객체가

    a에도 존재하는데 이것이 여전히 클로저라고 생각하시나요?


    예제에서는 ta, tb, obj1이 모두 test1이 실행된 후에 해제됩니다. 그 안에 생성된 obj1 변수가 가리키는 객체는 test1이 실행된 후 전역 변수 a에 추가됩니다. 마지막으로 a[0]은 이 개체를 참조하므로 해제되지는 않지만 obj1

    과 관련이 없습니다. 전체 프로세스 필드는 변경되지 않았습니다. a에 푸시된 것은 obj1

    대신 obj1이 가리키는 객체입니다.

    이것을 이해하실 수 있을지 모르겠습니다. 제 중국어 수준이 너무 낮아서 말을 제대로 못 하는 것 같아요 ==#🎜🎜#

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