선생님 ! setTimeout에 관하여 질문이 있습니다!
210
작성한 질문수 1
자바스크립트 개념이 너무나 어려워, 프로젝트를 진행하면서 공부하겠다고 마음먹고 선생님의 강의를 보니 정말 실제로 활용이 이렇게 되는 부분이구나 하고 알 수 있어서 행복합니다..!!
사실 강의를 보다가 제가 이해를 잘못한 것인지 여쭙고 싶은 부분이 있어 질의를 드리게 되었습니다.
setTimeout에 관한 부분인데요.
1단계 상수 main은 HTML문서의 #main을 호출한다.
상수 qna는 HTML 문서의 #qna를 호출한다
2단계 begin 함수 생성 begin 함수는 상수 main의 스타일에 CSS스크립트에 명시한 keyframes fadeOut을 1초동안 준다.
3단계. 450ms를 기다린 후에 1번째 setTimeout 메서드가 등장한다.
그리고 다시 450ms를 기다린 후에 2번째 setTimeout이 등장한다.
그런데 모질라의 글을 계속 보다보니까, 다음과 같은 부분을 발견했습니다.
"setTimeout()은 비동기 함수로서, 함수 스택의 다른 함수 호출을 막지 않습니다. 달리 말하자면, setTimeout()을 사용해서 다음 함수 호출을 "일시정지" 할 수는 없습니다."
이해해보자면 첫번째 setTimeout이 두번째 setTimeout을 기다리는게 아니고, 동시에 실행된다는 것인데, 자세히 보면 setTimeout 메서드는 두 개가 아니고, 바깥쪽 setTimeout에 안쪽 setTimeout이 포함되어 있었습니다.
그래서 아래와 같은 함수로 조금 수정을 해보았습니다.
function begin(){
main.style.WebkitAnimation = "fadeOut 1s";
main.style.animation = "fadeOut 1s";
main.style.MozAnimation = "fadeOut 1s";
setTimeout(() => {
qna.style.WebkitAnimation = "fadeIn 1s";
qna.style.Animation = "fadeIn 1s";
qna.style.MozAnimation = "fadeIn 1s";
main.style.display = "none";
qna.style.display = "block"; }
,900);
위와 같은 함수로 바꾸어 실행해보니, 똑같이 작동함을 알게되었는데,
1초는 짧기에 10배를 늘려서도 보고, 450,450으로 나뉜것을 800,100 / 100,800으로 나누어 실행하여도 똑같이 작동됩니다.
그래서 이해하기를 안쪽과 바깥쪽에 걸어놓았던 delay 450ms는 900ms가 되어 하나의 delay로 작동한다는 것으로 이해했는데, 이게 올바로 이해한 부분일까요?
답변 1
1
어떠한 doc를 읽으셨는지 확인할 수 없어서 첨언해드리기 조금 조십스럽습니다.
제 생각에는 setTimeout을 이용하여, js를 비동기적으로 실행하고자 할 때의 주의사항을 읽으신 것 같습니다.
(setTimeout을 사용하여 js를 비동기적으로 실행되는 것은 보장되지 않습니다.)
기존애 setTimeout과 관련되서는, 처음에 서술하신 부분이 맞습니다.
다만, 코드를 바꾸셨을 때 제대로 실행되는 이유는 (혹은 실행되는 것처럼 보이는 이유는)
저희 이번 프로젝트에서 qna와 main 모두 1초의 애니메이션을 가지고 있기 때문입니다.
아래 두 코드를 실행해보시면 차이점을 더 명확히 아실 수 있을 것 같습니다.
setTimeout(function () {
console.log("1");
setTimeout(function () {
console.log("2");
setTimeout(function () {
console.log("3");
}, 1000);
}, 1000);
}, 1000);
setTimeout(() => {
console.log("1");
console.log("2");
console.log("3");
}, 3000);
emmet 에디터 설치 하려고 하는데 안 나오네요
0
166
2
결과 이미지랑 글이 안떠요 왜일까요
0
142
1
select 배열 이해를 도와주세요!
0
377
1
result 에서 결과가 안 나와요.
0
377
1
결과 계산하기에서 콘솔이 다르게 찍힙니다.
0
402
1
다음 버튼을 누르면 다음질문으로 넘어가게 만들고 싶어요.
0
387
1
클론코딩 시
0
372
1
결과페이지 선택값 합산하기
0
356
1
select 부분이 이해가 안가서 질문드립니다 ㅠ
0
391
1
index에서 result 페이지로 이동 질문드립니다.
0
437
1
진행바 강의에서요 스테이터스바가 짤립니다
0
380
1
이미지버전에서 부트스트랩 이미지하고 텍스트도 이용하고 싶어요
0
526
1
viewport 가 제대로 작동을 안해요 뭐가 문제일까요?
0
483
1
결과 페이지별 개별링크버튼 추가
0
359
1
뒤로가기
0
425
1
netlify not found 오류
1
1064
1
아톰 에디터 설치
2
949
1
display:block을 사용하는 이유
1
461
1
qIdx수에 따라 for 문이 돌아요 ㅜ.ㅜ
1
386
1
카카오톡 공유하기
1
588
1
질문 개수 5개에 결과 4개
0
434
1
질문 수를 줄이는 방법
1
393
1
강의 순서
1
271
1
결과페이지에서 result-0,1,23,....html 호출하기
1
356
1





