Text
클로저의 개념:
클로저는 많은 변수를 갖는 표현식(보통 함수)이고 이러한 변수에 바인딩된 환경이므로 이러한 변수도 표현식 부분입니다.
가장 일반적인 클로저
function a() {
var i=0;
return function(){
alert(i )
}
var b= a( );
for(var i=0;i<3;i ){
b()
}
위 코드를 설명하기 전에, 먼저 a를 수락합니다. 함수의 생성 및 실행 과정
첫 번째 단계: 함수 정의, 환경 설정, 범위 체인 생성 이제 a는 전역 변수이고 a의 범위 체인은 다음과 같습니다. window
2단계: a를 실행하고 먼저 범위(a.scope=a)를 만든 다음 활성 개체(callObject)를 만들고 callObject를 a의 범위 체인 맨 위에 놓습니다. a의 범위 체인에는 두 개의 개체(a 및 창)가 포함됩니다.
3단계: 활성 개체에 인수 속성을 추가하여 a 호출 시 매개변수 값을 저장합니다.
4단계: 형식 매개변수 할당 및 내부 변수 활성 객체 a로 이동
javascriptGC 원칙: 객체가 더 이상 참조되지 않으면 해당 객체는 GC에 의해 재활용됩니다. 두 개체가 간섭 없이 서로 참조하는 경우 두 개체도 모두 재활용됩니다.
요약:
1. 먼저 a의 범위 체인이 생성됩니다.
2. a.scope=a, callObject 객체를 생성하고 이를
의 범위에 추가합니다. 3. a 객체에 인수 속성을 추가하고 i 및 return 함수를 활성 객체
4. a가 실행되면 b는 a의 ruturn 함수 값을 가리키고, b는 a의 지역 변수 i를 참조하므로 활성 객체 a는 재활용되지 않습니다. b는 i에 액세스합니다. 처음으로 액세스되는 객체이며 b에서만 액세스할 수 있습니다.