코딩굼벵이
구르는 중
코딩굼벵이
  • 분류 전체보기 (116)
    • [C_C++]이론 공부 (17)
      • 알고리즘 (11)
      • 이론+STL (6)
    • [C_C++]코딩테스트 연습 (45)
      • [프로그래머스] level 1 (26)
      • [프로그래머스] level 2 (5)
      • [백준] 일반 문제 (12)
      • 기타 (2)
    • Solana (28)
      • Documentation (9)
      • Validator - 공부 (10)
      • Validator - 실행 (devnet & te.. (6)
      • 그 외 (3)
    • React (4)
    • Linux (2)
    • Javascript (2)
    • 블록체인 기반 핀테크 및 응용 SW 개발 (8)
      • React (1)
      • Javascript (3)
      • Solidity (3)
      • 프로젝트 (1)
    • 기타 (10)

블로그 메뉴

  • 🌟 깃허브
  • 🌿 Portfolio(2021)
  • 홈
  • 태그
  • 방명록

티스토리

최근 글

태그

  • grafana
  • 모니터링
  • Hooks #React
  • Immer #ContextAPI
  • 솔라나
  • 밸리데이터

인기 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
코딩굼벵이

구르는 중

[JavaScript] setTimeout()의 형식과 익명함수, arrow 함수 공부
블록체인 기반 핀테크 및 응용 SW 개발/Javascript

[JavaScript] setTimeout()의 형식과 익명함수, arrow 함수 공부

2021. 1. 11. 22:59
728x90

저번 승부차기 만들기 과제에서 상대가 1초 뒤 자동으로 공을 차게 하기 위해 setTimeout()을 사용했는데,

아직 setTimeout의 형태가 손에 잘 익지 않아 복습 겸 정리를 해본다.

 

자바스크립트에서는 딜레이를 주기 위해 setTimeout()을 사용한다.

일정 시간 간격마다 실행하고 싶다면 setInterval()을 사용하는데, 클럭처럼 사용해도 될 것 같다.

나는 주로 setTimeout()을 사용할 것 같으니 구조를 분해하며 알아보겠다.

 

setTimeout(function(){
       console.log('dddd');
}, 1000);
//1초 뒤에 콘솔 로그에 dddd를 출력하는 코드

 

setTimeout 함수의 기본형은 위와 같다.

위의 코드는 setTimeout(  ); 에 인자로 function(){ }, delay 를 넣어준 것이다.


1. function(){ } 사용(익명함수)

setTimeout()의 첫번째 인자로 사용한 function(){ }는 익명함수라고 한다.

보통 함수를 쓸 때 function func(param){ ... } 형태로 인자와 이름을 주고 선언해서 사용하는데,

함수를 재사용하지 않을 경우에는 함수의 이름을 정해주지 않고도 사용할 수 있다.

그 코드의 다른 곳에서 또 호출하려면 이름이 필요하지만, 일회성으로 쓸 땐 이름이 필요 없으니까 이름 없이 사용한다.

즉 function(){ }는 인자가 없는 익명함수라고 볼 수 있다.

 

딜레이를 주고 싶은 코드는 첫번째 인자인 function(){ ... } 형태로 넣으면 된다.

딜레이는 두번째 인자 자리에 ms 단위로 넣어주면 된다. 위 1000ms = 1s 딜레이가 생긴다.

 

=> setTimeout( function(){ }, delay ); 형태로 사용한다는 것을 기억하면 된다.

 


2. () => { } 사용(arrow 함수)

위에서 사용한 익명함수 function(){ }는 arrow 함수를 이용해 더 간단한 형태로 선언할 수 있다.

그냥 인자를 앞으로 빼고 function 키워드 대신 => 를 사용하면 된다.

처음에는 생소한 형태라 당황스러웠는데 생각보다 간단했다..

 

1에서의 코드를 arrow 함수로 바꿔보면 아래와 같다.

 

setTimeout(() => {
       console.log('dddd');
}, 1000);

 

뭔가 깔끔해진 것 같기도 하고 아닌 것 같기도 하고

arrow 함수는 인자 개수가 1개면 소괄호를 생략할 수 있고,

함수 바디가 한줄 구문이면 중괄호를 생략할 수 있고 암묵적으로 return된다고 한다.

(a, b) => a+b;                      //arrow 함수 표현
function(a, b) { return a+b; }      //익명 함수 표현

 

arrow 함수는 익명 함수로만 사용할 수 있기 때문에 호출하려면 함수 표현식을 써야 한다.

const add = (a, b) => a+b;    //arrow 함수 표현

console.log(add(3,5));        //8
function add(a, b) {            //일반 함수 표현
       return a+b;
}
console.log(add(3,5));          //8

사실 이렇게 봐서는 일반 함수 표현의 중괄호 줄넘김을 안하면 끝이기 때문에 아직 유용한지 잘 모르겠다.

누가 사용한 코드를 읽을 수 있을 정도로만 이해해놓고 나중에 필요하면 사용해봐야겠다.

 


※ 자바스크립트에서 setTimeout 실행 시 문제점

 

자바스크립트는 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고

다음 코드를 먼저 실행하는 비동기 처리를 한다.

그렇기 때문에 c, c++처럼 코드의 중간에 delay를 넣으면 이 딜레이를 기다려주지 않고 밑의 코드를 실행해버려서

순서가 뒤죽박죽이 돼버리고 의도치 않은 결과를 얻게 되기도 한다.

 

이를 해결하기 위해 공부해야하는 것이 콜백 함수, promise, async/await 개념이다.

이미 배웠지만 어려운 내용이고 이거 정리하면서 에너지와 시간을 다 쏟아놔서

다음에 알아보도록 하자^.^ 첫 정리 끝~~

'블록체인 기반 핀테크 및 응용 SW 개발 > Javascript' 카테고리의 다른 글

블로킹/논블로킹, 스레드 - 싱글/멀티 스레드 정리  (0) 2021.02.16
과제를 통한 async, await 연습(+호이스팅, callback, promise 맛보기)  (2) 2021.01.22
    '블록체인 기반 핀테크 및 응용 SW 개발/Javascript' 카테고리의 다른 글
    • 블로킹/논블로킹, 스레드 - 싱글/멀티 스레드 정리
    • 과제를 통한 async, await 연습(+호이스팅, callback, promise 맛보기)
    코딩굼벵이
    코딩굼벵이
    구르는 재주 연마 중

    티스토리툴바