로또 당첨기 콜백함수 관련 질문

19.07.16 01:53 작성 조회수 108

0

for (var i = 0; i < 당첨숫자들.length; i++) {

  (function 클로저(j) {
  // var j = i;
  setTimeout(function () {
  공색칠하기(당첨숫자들[j], 결과창);
  }, (j + 1) * 1000);
  })(i);
  }

 

setTimeout( 공색칠하기(당첨숫자들[j], 결과창),  ( j + 1) * 1000);  << 이렇게 하면 왜 안 되는 건가요? 

setTimeout 함수 안에 또 익명 함수를 선언하여 콜백함수를 만들어야 되는 이유가 궁금해요.

클로저 문제때문에 function 클로저를 선언하여 함수로 감싸는 건 이해가 되는데 setTimeout 안에 콜백함수를 

또 함수로 감싸야 하는 이유가 궁금합니다. 이 부분이 이해가 안돼서 아무리 온라인에서 찾아봐도 이해가 안 되더라구요 ㅠㅠ

지뢰찾기 강의도 듣고 클로저 강의도 들었는데 잘 이해가 안 돼서요 ㅠㅠ 

 

답변해주시면 감사하겠습니다. 

답변 2

·

답변을 작성해보세요.

1

공색칠하기(당첨숫자들[j], 결과창) 이렇게 하는 순간, 함수 호출이기 때문 바로 실행되어 버립니다(setTimeout보다도 전에). 그래서 실행되지 않은 함수로 감싸주는 것입니다. 그 함수가 호출되면서 내부의 공색칠하기(당첨숫자들[j], 결과창)도 실행되게끔요.

 

a(b())와

a(function b() {})는 완전 다른 겁니다.

0

YJ Ginter님의 프로필

YJ Ginter

질문자

2019.07.16

답변 너무 감사합니다! 강의 잘 듣고 있어요! 그냥 문법만 따라하는 강의가 아니라 프로그래밍적 사고도 해 줄수 있게 해줘서 강의가 맘에 들어요 ^^