인프런 커뮤니티 질문&답변

김현종님의 프로필 이미지
김현종

작성한 질문수

웹 게임을 만들며 배우는 자바스크립트

안녕하세요 클로저 부분에서 질문 있습니다.

해결된 질문

작성

·

218

0

코드

function one() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function () {
      console.log(i);
    }, i * i * 100);
  }
}

function two() {
  for (var i = 0; i < 3; i++) {
    closure(i);
  }
}

function closure(i) {
  setTimeout(() => {
    console.log(i);
  }, i * i * 100);
};

one();
two();

생각한 실행 결과

3 3 3 0 1 2

실제 결과

3 0 3 1 3 2

이렇게 나오는데 혹시 생각한 실행 결과처럼 나오게 하려면 어떻게 할 수 있나요?

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

i*i*100의 i에 0 1 2를 각각 넣어보시면 왜 타이밍이 그렇게 나오는지 아실 수 있습니다.

김현종님의 프로필 이미지
김현종
질문자

그렇다면 one과 two를 실행했을때 생각한 실행 결과가 나오게 하려면 시간초를 다르게 하는 수밖에 없는 건가요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 setTimeout은 단순히 정해진 시간초 뒤에 콘솔을 표시해주는 것이라서 정해진 시간초를 바꿔주어야 합니다.

김현종님의 프로필 이미지
김현종

작성한 질문수

질문하기