javascript - 일반적으로 모든 사람이 클로저에 함수를 사용합니다. 객체나 클로저를 사용하면 어떻게 되나요?
PHP中文网
PHP中文网 2017-05-19 10:42:53
0
3
699
으아아아

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

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(3)
淡淡烟草味

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

으아악

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

滿天的星座

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

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

淡淡烟草味

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

정의와 모순됩니다


이해가 틀렸다면

예를 바꿔주세요

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

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


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

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

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

이것을 이해하실 수 있을지 모르겠습니다. 제 중국어 수준이 너무 낮아서 말을 제대로 못 하는 것 같아요 ==#🎜🎜#
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿