Skip to content

기글하드웨어기글하드웨어

인터넷 / 소프트웨어 : 윈도우즈, 리눅스, 기타 운영체제, 각종 어플리케이션, 프로그램, 소프트웨어, 인터넷, 인터넷 서비스에 대한 이야기, 소식, 테스트, 정보를 올리는 게시판입니다.

Extra Form

다른 비동기 프로그래밍 언어도 그런건지는 잘 모르겠으나 이게 루프 돌릴때 참 골때립니다.

해보신분은 알겠지만 자바스크립트에서 지연처리를 한다고 하면 setTimeout이나 setInterval을 쓰죠

 

setTimeout(fn, delay)

 

이렇게 쓰면 함수fn이 delay시간(밀리세컨드 단위) 후에 실행이 되는건데 그러면 누구나 상식적으로

 

for(var i = 0; i < 10; i++) {

setTimeout(function() {

console.log(i);    //반복작업 구문 example

}, 1000);

}

 

이런 식으로 쓰겠죠. 그런데 문제는.. 이러면 결과는 1초 후에 10만 열번 출력됩니다. What the..

 

결론적으로 말하면 setTimeout이 기다리거나 말거나 for는 죽어라 루프를 돌리고 setTimeout이 i를 찾을때는 10만 남아있는거죠

여기서 해결책이 두가지입니다. (물론 더 있겠지만..)

 

A : 내부에 함수를 하나 더 만들어서 i를 인자로 입력받습니다. 어려워보이지만 쓰고보면 별거 아닙니다.

 

// 익명함수 버전

for (i=0; i < 3; i++) {

(function(x) {

setTimeout(function() {

console.log(x);

}, 1000*x);

})(i);

}

}

 

// 기명함수 버전

function loop(x) {

setTimeout(function() {

console.log(x);

}, 1000*x);

}

for (i = 0; i < 3; i++) {

loop(i);

}

 

함수로 setTimeout을 감싸고 i를 놓치지 않고 죄다 익명함수의 x라는 변수로 받아서 시간 순서대로 실행되도록 만드는 거죠

오~ 기발한데~ 라고 생각이 들다가도 이게 뭔짓인가 싶습니다(...) 필요한 갯수만큼 setTimeout을 다 만들어놓는거니까요

 

B : 재귀함수를 만듭니다. 백문이 불여일견

 

function start(counter){

if(counter < 10){

setTimeout(function(){

counter++;

console.log(counter);

start(counter);

}, 1000);

}

}

 

start(0);

 

A와 비교하면 for 대신 if, 스코프는 한 단계 줄었습니다. (A도 결국 function 안에 속한다고 치면 말이죠.) 그러나 재귀함수가 그렇듯이 실행되기 시작하면 루프 개수만큼 늘어날테죠. 아무래도 재귀함수 자체가 좀 어려운 개념이다 보니 A 방식을 더 많이 본거 같긴 하네요

 

비동기 이슈로 한차레 골머리를 썩고 나니 ES6를 빨리 공부해야 할것 같습니다. Promise가 그렇게 좋다던데.. 파이썬 공부도 해야 하고 바쁘네요

 

오늘의 밥 아저씨

A: http://goo.gl/LuY4Qe

B: http://goo.gl/82thlY

 

Bob_ross.jpg

 



  • ?
    한걸음 2016.08.22 09:20
    settimeout 에 함수 넣을때 함수가 매개변수로 가지고 가게 만들어도 안되나요?
  • ?
    WebGL 2016.08.22 13:08
    옙, 바로 그 setTimeout이 함수실행 시점을 딜레이시키기 때문에 매개변수를 받는 시점도 늦어집니다
    직접 해보니 undefined만 시간순서에 맞춰서 출력되네요 setTimeout(......)까지는 전달이 되지만 매개변수의 함수까지는 전달이 늦춰지는 것 같습니다.

작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


  1. PC마크 10, 크로미움 엣지 지원

    UL벤치마크가 PC마크 10의 2.1.2165를 공개했습니다. 애플리케이션 벤치마크에서 크로미움 기반의 마이크로소프트 엣지를 지원합니다.
    Date2020.02.08 소식 By낄낄 Reply0 Views369 file
    Read More
  2. 공유사무실 네트워크 세팅 관련 질문입니다.

    우선 제가 현재 처한 문제와 현 상황, 예상 해결방안을 올립니다.   문제점 : 업무상 필요한 사무실 pc 원격접속이 불가능한 상황임.   현 상황: 1. 최근 공유사무실에 입주함. 2. 네트워크 구조는 사무실 내 KT회선을 받아 각 사무실로 ...
    Date2020.02.07 질문 Bydwscat20 Reply24 Views1347 file
    Read More
  3. 2021년부터 네이버 블로그에서 blog.me 도메인과 개인 도메인 접속 불가

      * 위 링크의 글을 인용하였습니다.   안녕하세요. 네이버 블로그 서비스팀입니다. 블로그 도메인 정책이 변경되어 안내드립니다. 현재 블로그 도메인은 아래 3가지 방식으로 지원해드리고 있는데요, ① blog.naver.com ② blog.me ③ 개인...
    Date2020.02.07 소식 ByPixel Reply15 Views1622 file
    Read More
  4. No Image

    크롬·유튜브, 8분 이하 영상에선 중간광고 금지

    달라지는 구글의 광고 규정은 크게 세 가지다. 첫째. 전체 분량 8분 이하 영상에선 중간광고 금지. 둘째. 광고 분량이 31초를 넘어갈 경우엔 '5초 내 건너 뛰기' 의무화. 셋째. 영상 영역 중간 3분의 1 이상, 혹은 전체 영역 20% ...
    Date2020.02.06 소식 By낄낄 Reply8 Views1035
    Read More
  5. No Image

    Hyper-V 에서 VirtualBox 로 갈아타고 느낀점.

    한잔 하고 글을 쓰는거니 글에서 알콜냄새가 날겁니다~           저는 게임용 거실 PC가 있습니다. 전원을 켜면 자동 로그온 + 스팀 빅피쳐 모드 + 게이밍 키보드 + 게이밍 마우스 + 게임패드를 연결한 PC지요.  사양은 라이젠 3600에 57...
    Date2020.02.05 일반 ByMinny Reply12 Views22726
    Read More
  6. No Image

    실적에 눈먼 우리은행 직원들, 고객 2만여명 비밀번호 손댔다

    1년 이상 인터넷·모바일뱅킹에 접속하지 않은 비활성화(휴면) 계좌 고객이 다시 거래하려면 기존 비밀번호와 변경할 새 비밀번호를 함께 입력해야 한다. 기존 비밀번호를 기억하지 못하는 고객엔 은행이 개인정보를 확인한 뒤 임시...
    Date2020.02.05 소식 By낄낄 Reply15 Views1224
    Read More
  7. VM웨어 라이센스 정책 변경

    VM웨어가 소켓당 코어 수가 늘어나고 있는 상황에 대응하여 내년 4월부터 CPU당 라이센스에 대해 라이센스 1개당 물리코어 32개 제한을 적용한다고 밝혔습니다. CPU당 코어 수가 무한정 늘어날 수 있는 상황에서 현재의 CPU당 라이센스 ...
    Date2020.02.04 소식 By글레이셔폭포 Reply15 Views2214 file
    Read More
  8. 삼성 갤럭시 Good Lock 2020년 버전 출시

      2018년 이후로 출시된 삼성 갤럭시 스마트폰(S8/노트8 등 안드 8.0 이상의 버전으로 업뎃한 기종) 유저라면 누구나 쓸수 있는 UI 튜닝 앱인 굿락(Good Lock)이 조금 전 오후 3시경 새 버전(안드 10 정식 지원)이 출시되었습니다.   갤...
    Date2020.02.03 소식 Bytitle: 몰?루유키나 Reply2 Views1095 file
    Read More
  9. 한국 승강기 안전공단 홈페이지 수준. 역시 나라돈 땡기는 게 최고

    아버지 소유 건물에 설치된 엘리베이터의 관리자를 정하고, 교육을 받으라는 안내문이 왔습니다. 여기까지는 전혀 불만이 없습니다. 그런데 관리자 교육은 오직 한국 승강기 안전공단에서만 받을 수 있습니다. 여러 업체가 경쟁하는 게 아...
    Date2020.02.02 일반 By낄낄 Reply16 Views1425 file
    Read More
  10. ARM 안드로이드/리눅스에서 x86 윈도우 소프트웨어를 돌리기 위한 Hangover 프로젝트.

        리눅스나 안드로이드에서 Wine을 이용해 윈도 어플리케이션을 구동하는 프로젝트인 Hangover (숙취;) 입니다.   성능은 Exagear 등에 비해 '떨어집니다'. QEMU를 사용하는데 QEMU의 x86-64 에뮬 성능이 좋은 편은 아닌 탓이라고 합니...
    Date2020.01.31 소식 ByPHYloteer Reply3 Views1769 file
    Read More
  11. No Image

    윈도우 10 빌드 19555, 외장 드라이브 관련 버그 수정

    윈도우 10 인사이더 프리뷰 빌드 19555에서 몇몇 버그를 수정했습니다. 특정 USB 3.0 외장 드라이브를 연결 후 응답하지 않는 문제, ARM64 디바이스에서 이전 빌드의 업그레이드가 되지 않던 문제, 음악을 던던 중 컴퓨터를 잠궜다가 해제...
    Date2020.01.31 소식 By낄낄 Reply2 Views526
    Read More
  12. No Image

    NEC, 방위 사업 부문 서버에 무단 액세스 확인

    NEC는 자사의 방위 사업 부문 서버에 무단 액세스가 발생했다고 발표했습니다. 2016년 12월 후에 공격이 이루어졌으나 이를 확인하지 못했고, 2017년 6월의 보안 업체 보고서에서 통신 패턴을 검토한 결과 악성 통신이 나가고 있음을 확인...
    Date2020.01.31 소식 By낄낄 Reply2 Views628
    Read More
  13. 윈도우 10의 버전별 점유율

    AdDuplex의 SDK를 통해 9만대 이상의 PC에서 집계한 윈도우 10 버전별 점유율입니다. 현재 최신 윈도우 10 버전은 작년 11월에 나온 1909이며, 시장 점율 15.2%입니다. 버전 1903은 53.4%로 가장 높습니다. 서피스의 점유율도 따로 집계했...
    Date2020.01.31 소식 By낄낄 Reply3 Views1062 file
    Read More
  14. No Image

    윈도우 7에서 우분투 리눅스로 업그레이드 가이드

    캐노니컬이 윈도우 7에서 우분투로 '업그레이드'를 하는 방법을 소개했습니다. 윈도우 7의 지원이 중단되면서 대체 OS로 우분투를 은근슬쩍 미는군요. 우분투는 무료 OS이며 6개월마다 새 버전이 나온다는 장점이 있습니다. 단점...
    Date2020.01.31 소식 By낄낄 Reply3 Views748
    Read More
  15. 웹 브라우저 기반 안드로이드 플래시 툴

    웹 브라우저에서 스마트폰에 안드로이드 OS를 올리는 안드로이드 플래시 툴입니다. 구글 크롬, MS 엣지 버전 79 이상을 비롯한 WebUSB 지원 브라우저에서 사용 가능. 운영체제는 윈도우/macOS/크롬 OS/리눅스. 아직 모든 제품에 다 되는 ...
    Date2020.01.31 소식 By낄낄 Reply0 Views589 file
    Read More
목록
Board Pagination Prev 1 ... 371 372 373 374 375 376 377 378 379 380 ... 578 Next
/ 578

최근 코멘트 30개

AMD
MSI 코리아
한미마이크로닉스
더함

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소