클로저는 함수에 있는 모든 변수의 마지막 값만 얻을 수 있기 때문에 여기서는 변수 i를 참조하므로 box() 함수는 실행 후 함수 배열을 반환하고 배열의 각 i는 동일한 A 변수 i를 참조합니다. . box()는 함수를 반환한다는 점에 유의하세요! 따라서 내부의 {return i}는 함수 내의 명령문일 뿐이며 아직 실행되지 않았으므로 물론 {return i}는 변경되지 않은 상태로 유지됩니다. 동일한 외부 i를 참조하기 때문에 box() 함수가 리턴할 때 외부 변수 i의 값은 5이다. 이때 각각의 리턴은 변수 i를 저장하는 동일한 변수 객체를 참조하므로 내부 변수인 경우 arr[]의 함수, 각 함수 내부의 i 값은 5입니다.
예제에서 for 루프의 함수는 할당만 되고 실행되지 않으므로 배열의 함수가 실행될 때 i의 값을 얻습니다. 이때 i는 루프 끝의 값만 갖습니다. 클로저는 위층에서 즉시 사용됩니다. 실행된 익명 함수는 각 루프에 대해 i 값을 얻습니다. 방법: 1. ES6 let을 사용하여 var function box() {
클로저는 함수에 있는 모든 변수의 마지막 값만 얻을 수 있기 때문에 여기서는 변수 i를 참조하므로 box() 함수는 실행 후 함수 배열을 반환하고 배열의 각 i는 동일한 A 변수 i를 참조합니다. . box()는 함수를 반환한다는 점에 유의하세요! 따라서 내부의 {return i}는 함수 내의 명령문일 뿐이며 아직 실행되지 않았으므로 물론 {return i}는 변경되지 않은 상태로 유지됩니다. 동일한 외부 i를 참조하기 때문에 box() 함수가 리턴할 때 외부 변수 i의 값은 5이다. 이때 각각의 리턴은 변수 i를 저장하는 동일한 변수 객체를 참조하므로 내부 변수인 경우 arr[]의 함수, 각 함수 내부의 i 값은 5입니다.
으아악클로저와 연결된 범위 체인은 "라이브"이기 때문에 각 바인딩된 변수 값의 별도 복사본을 할당하는 대신 i 변수를 참조합니다. 각 단계에서는 저장되지 않습니다. 참고 도서: JavaScript 섹션 8.6.에 대한 최종 가이드
으아악
으아악
예제에서 for 루프의 함수는 할당만 되고 실행되지 않으므로 배열의 함수가 실행될 때 i의 값을 얻습니다. 이때 i는 루프 끝의 값만 갖습니다. 클로저는 위층에서 즉시 사용됩니다. 실행된 익명 함수는 각 루프에 대해 i 값을 얻습니다.
를 대체합니다. 으아악방법: 1. ES6 let을 사용하여 var
function box() {
2. 클로저 사용
으아악함수 상자() {
. "클로저"라는 단어는 실행될 코드 블록(자유 변수가 블록 내에 포함되어 있기 때문에 이러한 자유 변수와 이들이 참조하는 객체는 해제되지 않음)과 자유 변수에 대해 제공되는 바인딩의 조합에서 유래합니다. 컴퓨팅 환경(범위) ---바이두 백과사전
을 의미합니다. 으아악은
이것은 i를 참조하는 기능일 뿐이므로 i를 누르고 있으면 i가 해제되는 것을 방지할 수 있습니다. 우리가 저장하는 것은 이 코드 블록이 실행되기 전에는 i가 무엇인지 알 수 없습니다. 즉, 실행 중일 때만 i를 찾으므로 모든 arr을 출력할 수 있으며 모든 출력은 5
여야 합니다.으아악
가 무엇인지는
i
이 호출될 때만 계산됩니다.이 함수를 호출하면
입니다.for
가 종료되었으므로for
已经结束,因此取i
的时候值是5
를 취할 때의 값은5