84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
test1 함수를 이렇게 호출한 후에도 여전히 메모리를 해제할 수 있나요? 전역 변수 a에는 test1 함수에 있는 개체에 대한 참조가 포함되어 있습니다. 왜 test1이 메모리를 해제하지 않을 것이라고 생각합니까? 조언 좀 부탁드립니다. . . .
认证高级PHP讲师
a와 test1은 실행 컨텍스트를 공유합니다. 즉, a와 test1이 공존하고 죽습니다~제 이해가 잘못된 것인지 모르겠습니다~예:
테스트를 실행하고 나면 test1이 나올 것 같고, a도 나올 것 같아요. 함수에 있지 않고 창 바로 아래에 있으면 test1은 항상 존재합니다~
예전에는 두 가지 문제로 착각했습니다.
실행 후 test1의 변수는 직접 참조되지 않으므로 test1의 실행 환경, 즉 컨텍스트를 재활용해야 합니다. 이는 클로저가 아닙니다. 또한 test1의 함수 본문 자체는 그것이 위치한 컨텍스트에 속하는 속성입니다. 컨텍스트가 여전히 존재하는 한 함수 본문 자체는 재활용되지 않습니다.
먼저 결론부터 얘기해볼까요 우선 클로저의 정의는 자유변수에 접근할 수 있는 함수인데
이해가 틀렸다면
으아악 original obj1이 가리키는 객체가
예제에서는 ta, tb, obj1이 모두 test1이 실행된 후에 해제됩니다. 그 안에 생성된 obj1 변수가 가리키는 객체는 test1이 실행된 후 전역 변수 a에 추가됩니다. 마지막으로 a[0]은 이 개체를 참조하므로 해제되지는 않지만 obj1
대신 obj1이 가리키는 객체입니다.
a와 test1은 실행 컨텍스트를 공유합니다. 즉, a와 test1이 공존하고 죽습니다~
으아악제 이해가 잘못된 것인지 모르겠습니다~예:
테스트를 실행하고 나면 test1이 나올 것 같고, a도 나올 것 같아요.
함수에 있지 않고 창 바로 아래에 있으면 test1은 항상 존재합니다~
예전에는 두 가지 문제로 착각했습니다.
실행 후 test1의 변수는 직접 참조되지 않으므로 test1의 실행 환경, 즉 컨텍스트를 재활용해야 합니다. 이는 클로저가 아닙니다. 또한 test1의 함수 본문 자체는 그것이 위치한 컨텍스트에 속하는 속성입니다. 컨텍스트가 여전히 존재하는 한 함수 본문 자체는 재활용되지 않습니다.
먼저 결론부터 얘기해볼까요
정의와 모순됩니다우선 클로저의 정의는 자유변수에 접근할 수 있는 함수인데
이해가 틀렸다면
으아악 original obj1이 가리키는 객체가
a에도 존재하는데 이것이 여전히 클로저라고 생각하시나요?예제에서는 ta, tb, obj1이 모두 test1이 실행된 후에 해제됩니다. 그 안에 생성된 obj1 변수가 가리키는 객체는 test1이 실행된 후 전역 변수 a에 추가됩니다. 마지막으로 a[0]은 이 개체를 참조하므로 해제되지는 않지만 obj1
대신 obj1이 가리키는 객체입니다.
이것을 이해하실 수 있을지 모르겠습니다. 제 중국어 수준이 너무 낮아서 말을 제대로 못 하는 것 같아요 ==#🎜🎜#