javascript - 저는 클로저를 처음 배워서 잘 이해가 안 되네요. 조언 좀 부탁드립니다.
大家讲道理
大家讲道理 2017-06-26 10:58:00
0
7
687
으아아아

box()가 실행된 후 왜 arr[0]에서 arr[4]까지의 값이 ​​​​모든 function () { return i;}
왜 그렇지 않습니까: function () {return 0;}, 함수() {return 1;}. . .

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(7)
学习ing

클로저는 함수에 있는 모든 변수의 마지막 값만 얻을 수 있기 때문에 여기서는 변수 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

입니다.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿