이전 기사에서는 js의 재활용 메커니즘에 대해 설명했지만 당시에는 재활용 메커니즘의 개념에 대해 약간 혼란스러웠습니다. 이제 재활용 메커니즘에 대해 더 깊이 이해하게 되었기 때문에 이렇게 게시합니다. 기억을 요약하고 심화시키는 기사.
재활용 메커니즘이 있는 이유는 무엇인가요? 왜?
예를 들어 메모리 카드가 8G입니다. 이 메모리 카드에 파일, 동영상, 음악을 저장하면 저장할 수 없게 됩니다. 이 메모리 카드에 다른 파일을 저장하려면 일부 파일을 삭제해야 합니다. 그런데 이렇게 삭제된 파일은 우리가 직접 삭제하는 것입니다. 수동 삭제는 js에서 삭제하는 것과 같습니다.
이러한 문제는 이러한 프로그래밍 언어에서도 발생합니다. 예, 메모리입니다! 우리가 선언하는 모든 변수는 메모리를 소비하며 변수가 많을수록 실행 속도가 느려집니다. 물론 변수뿐만 아니라 코드의 모든 것입니다. 이러한 문제를 해결하기 위해 해당 언어의 설계자는 일련의 코드 재활용 규칙을 설계했습니다.
코드 재활용 규칙은 다음과 같습니다.
1. 전역 변수는 재활용되지 않습니다.
2. 지역 변수는 재활용됩니다. 즉, 함수 실행이 끝나면 함수 내부의 모든 것이 삭제됩니다.
3. 다른 범위에서 참조하는 한 재활용되지 않습니다
저는 이를 증명하기 위해 몇 가지 예를 사용합니다.
function a(){ var user = "追梦子"; return user; } var b = a(); console.log(b); //追梦子
논리적으로 말하면 함수 a의 변수에 접근할 수 없는데 전역변수 b를 통해 함수 a의 반환값을 받았기 때문에 최종 코드는 다음과 같이 되었습니다.
function a(){ var user = "追梦子"; return user; } var b = "追梦子"; console.log(b);
여기에는 코드 재활용이 없는 것 같으니 다음 코드를 살펴보겠습니다.
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = a(); b(); //1 b(); //2 b(); //3
보세요, 일반적인 관행을 따른다면 출력은 3번과 1번이 되어야 합니다. 함수 본문이 실행되면 함수 본문의 코드가 지워지기 때문에 다음에 이 섹션을 실행하세요. time 코드에서 num은 여전히 1이어야 하지만 여기서는 상황이 약간 다릅니다. 위에서 함수의 지역 변수가 다른 범위에서 참조되는 한 이 코드는 파괴되지 않을 것이라고 말했습니다.
위 코드는 다음과 같습니다
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = function(){ num ++; console.log(num); }; b(); b(); b();
그러면 함수 a가 반환하는 익명 함수의 범위가 함수 a에서 window로 이동됩니다. 이 익명 함수는 전역 변수 b에 의해 참조되므로 소멸되지 않습니다.
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = { fn:a() } b.fn(); //1 b.fn(); //2 b.fn(); //3
익명 함수는 객체 b의 속성 fn에 의해 참조되어 해당 범위를 변경하기 때문에 마찬가지입니다. 간단히 말해서 함수나 지역 변수가 범위에서 변경되는 한 함수나 지역 변수는 변경되지 않습니다. 의해 파괴됨.
위 내용은 이 기사의 전체 내용입니다. js 재활용 메커니즘에서 도움을 얻을 수 있기를 바랍니다.