javascript - js 함정 질문: 실행 후 setTimeout() 함수의 결과가 5개의 6인 이유는 무엇입니까?
黄舟
黄舟 2017-05-19 10:47:29
0
3
786

setTimeout() 함수의 결과가 5개의 6인 이유는 무엇인가요?

으아아아

js 클로저를 사용하여 문제를 해결하고 원하는 1, 2, 3, 4, 5를 얻었지만 위 코드에 5개의 6이 나타나는 이유를 여전히 이해하지 못합니까?

으아아아
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(3)
PHPzhong

가장 먼저 이해해야 할 것은 JS의 작업 메커니즘이 대기열 메커니즘이라는 것입니다.

그래서 for 루프를 거치지 않고 그냥 setTimeout 작업을 큐 뒤에 두었습니다. 즉, setTimeout에서 실행되는 코드는 for 루프가 실행된 후에만 실행되므로 의 값은 다음과 같습니다. 그 당시에는 for 루프를 만족하지 않습니다. 값이 잘못된 경우 setTimeout 코드가 실행됩니다.

개인적인 의견이니 잘못된 점 있으면 지적해주세요

Peter_Zhu

var를 let으로 변경

var는 전역 정의이고 i는 클로저를 형성하지 않으며 log(i)는 i의 최종 값을 인쇄합니다. 6

let은 블록 수준 도메인입니다

으아악
为情所困

setTimeout에는 두 가지 특성이 있습니다. 즉, this는 컨텍스트의 this와 분리되어 있고 호출은 비동기적입니다.

이것은 [비동기]로 인해 발생하며 for 루프가 먼저 완료된 다음 setTimeout이 실행됩니다. 왜냐하면 for 루프는 실행될 때마다 끝에 6이 되기 때문입니다. - - 따라서 자연스럽게 setTimeout을 호출한 다음 나는 다섯 6

해결책 1:

으아악

해결책 2:

으아악

해결책 3:

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