Js 폐쇄
폐쇄 전 알아두셔야 할 사항
1. 기능 범위
(1) Js 언어의 특별한 점은 전역 변수를 함수 내에서 직접 읽을 수 있다는 것입니다
익명 함수의 실행 결과(즉, 내부 하위 함수의 선언이 전역 변수 cut에 할당됨), i가 메모리에 저장됩니다.
cut()을 실행할 때 메모리에서 직접 값을 가져옵니다. i는 cnt() 함수에 의해서만 호출될 수 있으며 직접 Alert(i)는 작동하지 않습니다
클로저에 매개변수를 전달할 수도 있습니다
클로저에 대해 더 잘 이해하기 위해 다음 코드를 살펴보겠습니다
예를 들어 배열을 반환하려고 합니다. 배열에는 5개의 함수가 있습니다. 첫 번째 함수는 0을 나타내고 두 번째 함수는 1을 나타냅니다.
코드를 이렇게 작성하면
팝업 기능 본체
함수(){return i;} }
마지막 i는 4이고 그 다음은 5가 됩니다
For 루프 중지
모든 경우에 5개의 팝업이 나타나는 것을 발견했는데 이는 확실히 우리의 요구 사항을 충족하지 않습니다
해결책 1
내부 기능 자체 즉시 실행
하지만 반환된 배열의 요소는 함수 실행의 결과라는 것을 알았지만 우리가 원하는 것은 함수가 코드를 업그레이드해야 한다는 것입니다
해결책 2
폐쇄 구현
arr=(함수(숫자){
반환 함수(){return num;}
})(i);
}
복귀 도착;
}
for(var i=0;i 경고(arr());//0,1,2,3,4
}
i=0일 때
arr[0]=(함수(숫자){반환 함수(){반환 숫자;}})(0);
1시
arr[1]=(함수(숫자){반환 함수(){반환 숫자;}})(1);