js 클로저 범위
扔个三星炸死你
扔个三星炸死你 2017-06-28 09:28:39
0
8
780

왜 10번이 출력되나요? 10이 1~9로 출력되어야 하는 것 아닌가요? 이 함정에 대한 답을 주세요

으아악
扔个三星炸死你
扔个三星炸死你

모든 응답(8)
黄舟

for 루프가 실행될 때 i 값을 저장하는 클로저 함수만 생성하면 순차적으로 출력될 수 있습니다

으아악
阿神

으아악

과거에 읽은 기사
클로저를 이해하려면 코드를 작성한 다음 이를 자신의 코드에 사용해야 합니다. 그 외에는 암기해야만 합니다.
고대 중국인들은 아이들이 아주 어릴 때 물건을 가지고 다니는 것을 좋아하지만 그것이 무엇을 의미하는지 모르고 때로는 명확하게 설명할 수 없는 경우도 있습니다. future
위의 내용
이 있다면 제가 작성한 로그를 읽어 보시는 것이 좋습니다. 그래도 이해가 안 되신다면
http://user.qzone.qq로 메시지를 남겨주세요. .com/2084...

女神的闺蜜爱上我

으아악

黄舟

으아악

각각의 i는 동일한 외부 i, 즉 10을 나타냅니다

黄舟

으아악

var 변수의 범위는 블록 수준 범위가 아닌 함수 범위입니다

Peter_Zhu

스코프 체인이 생성될 때 생성되었습니다. c[i] = function(i){ return i; };실행하면 현재 스코프에는 i가 없으며, 상위 스코프 save_i()의 i가 10이 되었습니다. 결과가 0~9라고 생각하시나요? 상위 범위가 전역 범위라고 생각하시나요?

黄舟

a[i]는 할당될 때 함수 묶음입니다. 즉, 실행되지도 않고 i를 얻지도 않으며 해당 범위도 i를 얻지 못합니다

아래에서 실행하면 이 함수 묶음은 루프가 실행된 후 10인 자체 범위에서 얻을 수 있는 i를 찾기 시작합니다

巴扎黑

var 키워드는 변수 범위를 함수 범위로 선언하므로 for 루프의 i 변수가 승격됩니다. 포스터가 for 루프의 섹션을 자체 실행 기능으로 변경하면 문제가 없습니다. 예:
함수 save_i(){

으아악

}

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